A controller service is, in a simplified view, a package of configuration parameters and code that does something in the background. Some examples are:
- Connections to external services, for instance databases and APIs, where the controller service encapsulates the connection parameters
- Record Readers/Writers that tell record processors how to interpret data formats
- Reporting Tasks that send statistics about NiFi on a regular basis, for example to a monitoring service
- Sharing state between processors and cluster nodes, for instance with cache services.
There is a more formal explanation in the docs but I understand that you read that already.
In the first two use cases, if you configure a processor that uses any of these services, the processor will ask you to configure a controller service. You will not be able to run the processor before you configure the controller service (or use an existing one.)