NiFi provides several extension points to provide developers the ability to add
functionality to the application to meet their needs. The following list provides a high-level
description of the most common extension points:

Processor

The Processor interface is the mechanism through which NiFi exposes access to
FlowFiles, their attributes, and their content. The
Processor is the basic building block used to comprise a NiFi dataflow. This interface
is used to accomplish all of the following tasks:

Create FlowFiles

Read FlowFile content

Write FlowFile content

Read FlowFile attributes

Update FlowFile attributes

Ingest data

Egress data

Route data

Extract data

Modify data

ReportingTask

The ReportingTask interface is a mechanism that NiFi exposes to allow metrics,
monitoring information, and internal NiFi state to be published to external endpoints,
such as log files, e-mail, and remote web services.

ControllerService

A ControllerService provides shared state and functionality across Processors,
other ControllerServices, and ReportingTasks within a single JVM. An example use case
may include loading a very large dataset into memory. By performing this work in a
ControllerService, the data can be loaded once and be exposed to all Processors via
this service, rather than requiring many different Processors to load the dataset
themselves.

FlowFilePrioritizer

The FlowFilePrioritizer interface provides a mechanism by which FlowFiles in a queue can be prioritized, or sorted, so
that the FlowFiles can be processed in an order that is most effective for a
particular use case.

AuthorityProvider

An AuthorityProvide is responsible for determining which privileges and roles, if
any, a given user should be granted.