控制器组件(Controller),是 Apache Kafka 的核心组件。它的主要作用是在 Apache ZooKeeper 的帮助下管理和协调整个 Kafka 集群。
![](https://img.haomeiwen.com/i16521878/a3991dd344328d4a.png)
控制器选举
借助于zk实现
集群初始化时,第一个成功创建 /controller 临时节点的 Broker 会被指定为控制器
其他节点监听/controller 状态,控制器故障时临时节点被删除,其他节点抢注,抢注成功者为新的控制器,加载配置承担控制器职责。
![](https://img.haomeiwen.com/i16521878/d9aa49ff46c1a88c.png)
控制器作用
- 主题管理(创建、删除、增加分区)
- 分区重分配
- Preferred 领导者选举
- 集群成员管理(新增 Broker、Broker 主动关闭、Broker 宕机)
控制器数据
![](https://img.haomeiwen.com/i16521878/156a82df8999dcd3.png)
这些数据其实在 ZooKeeper 中也保存了一份。每当控制器初始化时,它都会从 ZooKeeper 上读取对应的元数据并填充到自己的缓存中。有了这些数据,控制器就能对外提供数据服务了。这里的对外主要是指对其他 Broker 而言,控制器通过向这些 Broker 发送请求的方式将这些数据同步到其他 Broker 上。
控制器线程模型
新版本为单线程加事件队列
![](https://img.haomeiwen.com/i16521878/a9d033878987819d.png)
另外控制器对请求的处理还进行了优化,支持这种不同优先级请求的处理,将控制器发送的请求与普通数据类请求分开,实现了控制器请求单独处理的逻辑。
网友评论