Kafka集群Leader选举原理

Kafka集群Leader选举原理
我们知道Zookeeper集群中也有选举机制,是通过Paxos算法,通过不同节点向其他节点发送信息来投票选举出leader,但是Kafka的leader的选举就没有这么复杂了。
Kafka的Leader选举是通过在zookeeper上创建/controller临时节点来实现leader选举,并在该节点中写入当前broker的信息
{“version”:1,”brokerid”:1,”timestamp”:”1512018424988”}
利用Zookeeper的强一致性特性,一个节点只能被一个客户端创建成功,创建成功的broker即为leader,即先到先得原则,leader也就是集群中的controller,负责集群中所有大小事务。
当leader和zookeeper失去连接时,临时节点会删除,而其他broker会监听该节点的变化,当节点删除时,其他broker会收到事件通知,重新发起leader选举。

KafkaController
KafkaController初始化ZookeeperLeaderElector对象,为ZookeeperLeaderElector设置两个回调方法,onControllerFailover和onControllerResignation
onControllerFailover在选举leader成功后会回调,在onControllerFailover中进行leader依赖的模块初始化,包括向zookeeper上/controller_epoch节点上记录leader的选举次数,这个epoch数值在处理分布式脑裂的场景中很有用。
而onControllerResignation在当前broker不再成为leader(即当前leader退位后)时会回调。
KafkaController在启动后注册zookeeper的会话超时监听器,并尝试选举leader。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章