Mark Payne created NIP-11:
-----------------------------
Summary: Introduce Connector extension point
Key: NIP-11
URL: https://issues.apache.org/jira/browse/NIP-11
Project: NiFi Improvement Proposal
Issue Type: New Feature
Reporter: Mark Payne
h1. Motivation
The Apache NiFi ecosystem currently caters primarily to Data Engineers and
Software Engineers, who possess the technical expertise required to navigate
its learning curve. While NiFi offers powerful capabilities for creating and
reusing versioned data flows, these flows often necessitate substantial
modifications, particularly when adapting to diverse source/destination system
authentication strategies. A consistent demand has emerged from less technical
users for a more "self-service" solution, alongside requests for automated use
cases where users can adjust a few properties without undertaking significant
flow alterations. To address these challenges and broaden NiFi's accessibility,
this proposal introduces a new "Connector" concept.
h1. Scope
The introduction of the Connector abstraction represents a significant
undertaking that will necessitate extensive modifications across the NiFi
architecture. This initiative will require substantial additions to the
existing NiFi API and Framework. Furthermore, it will necessitate updates to
the flow.json definition and the various Versioned object models to accommodate
the new abstraction. Additionally, the user interface will require updates to
provide a cohesive and intuitive experience for configuring and managing
Connectors.
h1. Description
This proposal aims to introduce a new "Connector" abstraction and extension
point within Apache NiFi. A Connector will encapsulate a complete NiFi flow,
represented as a Process Group. This new entity will be responsible for the
lifecycle management of its constituent components, including their starting
and stopping. Crucially, a Connector will also be responsible for dynamically
updating its encapsulated flow based on the configuration it exposes to the
user. This dynamic update capability will encompass modifying Processor and
Controller Service properties, and potentially even adding or removing
components within the flow.
Unlike a Processor, which typically presents a flat list of configurable
properties, a Connector will feature a structured collection of PropertyGroups.
This organizational approach will enable developers to logically separate
different areas of configuration, such as distinct sections for "Source
configuration," "Destination configuration," "Transformations," and
"Enrichments." This structured approach enhances clarity and ease of use for
users.
Use of Custom UIs, or even more tailored reusable UI components could be used
in order to provide a clearer, more usable configuration for selecting source
entities, as well. For example, a UI might offer the ability to choose which
remote resources should be polled for data whereas we typically rely on domain
specific languages such as glob patterns or regular expressions. While this is
feasible at a Processor level, it can be made more reusable and consistent
among components with Connectors, and that information can be used to more
intelligently configure the flow for the user.
Furthermore, the Connector abstraction will provide a robust foundation for
more safely upgrading data flows from one version to another. This is achieved
by enabling the execution of custom code to gracefully migrate configurations
and flows. This capability extends beyond individual component updates,
potentially allowing for complex operations such as migrating state between
different components, which is not feasible at the individual component level.
Finally, the Connector concept lays the groundwork for building future
capabilities that are inherently meaningful at the flow level, as opposed to
the single component (Processor or Controller Service) level. Examples of such
capabilities include comprehensive validation of an entire flow, gathering
holistic metrics that provide a more complete operational picture, or providing
metrics specifically tailored for intelligent scaling decisions.
h1. Expected API
The NiFi API will be impacted significantly. While it’s difficult to entirely
suss out the full API, an initial implementation can be found at
[https://github.com/markap14/nifi-api/tree/connectors/src/main/java/org/apache/nifi/components/connector]
Given the scope, the API will be noted as experimental and may change in a
non-backward compatible manner between minor versions until the API has been
more fully validated through developing concrete implementations.
--
This message was sent by Atlassian Jira
(v8.20.10#820010)