什么是Kafka控制器
在Kafka集群中,控制器主要处理:
- 分区Leader选举
- 分区状态管理
- 副本管理
- 等等
控制器选举
当kafka集群启动时,每个broker都会到zookeeper上创建名为/controller
的节点,但只有一个broker可以创建成功。创建成功的那个borker就成为了控制器。
当控制器broker挂掉时,与zk的连接会话失效,/controller
节点会被zk自动删除,剩余的broker就会尝试创建该/controller
,创建成功的就称为了新的控制器。
我们可以使用zkCli.sh
连接zk,然后可以使用ls /
看到controller
节点:
使用get /controller
可以看到当前控制器是id为1的broker:
分区Leader选举
为分区选举leader也是控制器的工作之一,我们先创建一个2分区,3副本的主题用于测试:
./kafka-topics.sh --bootstrap-server 10.211.55.3:9092 --create --topic test \
--partitions 2 \
--replication-factor 3
其中分区0的leader是0,Isr是0,1,2
:
Isr是候选broker集合,并且是有序排列的,kafka会根据节点之间的网络情况,性能等排列出候选集,当broker0挂了之后,分区0就需要重新选举Leader。
选举的规则很简单,就是从Isr中选择一个作为新的Leader。
做个简单的试验,关闭broker-0,再次查看主题详情:
可以看到,两个分区的Leader都变了。
总结
总结一下kafka控制器的作用:
- 分区Leader出现故障时,为分区选举新的Leader
- 分区ISR集合发生变化时,通知其他broker更新元数据信息
- 增加分区时,通知其他broker