Writing custom Apache NiFi controller services
When a shared connection pool, client or cache belongs in a controller service: API and implementation NAR split, lifecycle annotations, validation and sharing one service across processors.

Extension points beyond custom processors: controller services, reporting tasks, parameter providers, scripted components, custom UIs, packaging and testing, based on the NiFi Developer's Guide.
When a shared connection pool, client or cache belongs in a controller service: API and implementation NAR split, lifecycle annotations, validation and sharing one service across processors.
Building a reporting task that sends NiFi status and metrics to a monitoring system the standard tasks do not cover, including scheduling, access to status data and load on large flows.
Pulling parameters from an internal secret store or configuration service that NiFi does not support out of the box: parameter groups, fetch behavior, sensitive values and refresh.
Unit testing processors and controller services with TestRunner: enqueueing FlowFiles, setting properties, adding controller services, mocking external systems and asserting output, and running tests in CI.
When ExecuteGroovyScript, ScriptedTransformRecord or InvokeScriptedProcessor is enough and when a real processor is better: performance, testing, restricted component policies and upgrade risk.
Structuring Maven builds for NiFi extensions: NAR dependencies, parent NARs for shared APIs, ClassLoader isolation, per-instance classloading for drivers and versioning NARs across NiFi upgrades.
Building advanced configuration UIs and content viewers for NiFi 2: the WAR layout, the root path contract changed in 2.0, the servlet-based viewer pattern from 2.5 and avoiding Spring Boot dependencies.

Tell us what you're working on, whether it's a deployment, an audit, a security test or a cyber range. You'll speak with an engineer who can help you scope it.