目录
Kafka是一个高性能,高容错,多副本,可复制的分布式消息系统。在整个系统中,涉及到多处选举机制:
- 控制器(Broker)选主
- 分区多副本选主
- 消费组选主
控制器(Broker)选举
所谓控制器就是一个Borker,在一个Kafka集群中,有多个broker节点,但是它们之间需要选举出一个leader,其他的broker充当follower角色。集群中第一个启动的broker会通过在zookeeper中创建临时节点/controller来让自己成为控制器,其他broker启动时也会在zookeeper中创建临时节点,但是发现节点已经存在,所以它们会收到一个异常,意识到控制器已经存在,那么就会在zookeeper中创建watch对象,便于它们收到控制器变更的通知。
那么如果控制器由于网络原因与zookeeper断开连接或者异常退出,那么其他broker通过watch收到控制器变更的通知,就会去尝试创建临时节点/controller,如果有一个broker创建成功,那么其他broker就会收到创建异常通知,也就意味着集群中已经有了控制器,其他broker只需创建watch对象即可。
如果集群中有一个broker发生异常退出了,那么控制器就会检查这个broker是否有分区的副本leader,如果有那么这个分区就需要一个新的leader,此时控制器就会去遍历其他副本,决定哪一个成为新的leader,同时更新分区的ISR集合。
如果有一个broker加入集群中,那么控制器就会通过Broker ID去判断新加入的broker中是否含有现有分区的副本,如果有,就会从分区副本中去同步数据。
集群中每选举一次控制器,就会通过zookeeper创建一个controller epoch,每一个选举都会创建一个更大,包含最新信息的epoch,如果有broker收到比这个epoch旧的数据,就会忽略它们,Kafka也通过这个epoch来防止集群产生“脑裂”。
分区副本选举机制

本文详细介绍了Kafka中的选举机制,包括控制器(Broker)的选主过程,分区多副本如何选择新Leader,以及消费组的选主策略。控制器选举依赖于ZooKeeper,确保集群一致性;分区副本选举则通过跟踪follower的复制进度来维护同步,确保数据一致;消费组选主基于Raft算法,保证消费组内部的协调。
最低0.47元/天 解锁文章
1825

被折叠的 条评论
为什么被折叠?



