Kafka控制器


什么是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
文章作者: 周君
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 周君 !
评论