Skip to content


ControllerServer represents the controller in process.roles.

Creating Instance

ControllerServer takes the following to be created:

ControllerServer is created alongside a KafkaRaftServer (for controller in process.roles).

Starting Up

startup(): Unit

startup changes status from SHUTDOWN to STARTING.

startup uses for...FIXME

startup prints out the following INFO message to the logs:

Starting controller

startup requests the DynamicBrokerConfig (of the KafkaConfig) to initialize (with no KafkaZkClient as it runs in Zookeeper-less KRaft mode).

startup changes status from STARTING to STARTED.

startup registers new metrics (gauges) in the KafkaMetricsGroup.

Metric Name Description
ClusterId clusterId
linux-disk-read-bytes (only on Linux)
linux-disk-write-bytes (only on Linux)



There is a lot services being registered that seem not necessarily as important at this early stage of the KRaft exploration of mine 😉

startup requests the SharedServer to startForController.


startup builds the QuorumController.


In the end, startup requests the DynamicBrokerConfig

startup registers this ControllerServer for dynamic config changes (to the KafkaConfig).

startup is used when:

  • KafkaRaftServer is requested to startup


Enable ALL logging level for kafka.server.ControllerServer logger to see what happens inside.

Add the following line to config/


Refer to Logging.