Leader Election

本文介绍基于Zookeeper的两种Leader选举方案:非公平模式和公平模式,并讲解了Kafka如何通过Controller进行Leader选举,有效缓解Herd Effect问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Leader Election

Zookeeper的基本操作

Zookeeper虽然是分布式系统,但它并不是为文件存储而设计的,Zookeeper里存储的一般是配置信息和源信息。实际上,Zookeeper在每个节点上存储大小都在1M一下(通常是远小于1M)

 

 

基于ZookeeperLeader Election

抢注Leader节点——非公平模式

1.创建Leader父节点,如/chroot,并将其设置为persist节点

2.各客户端通过在/chroot下创建Leader节点,如/chroot/leader,来竞争Leader。该节点应被设置为ephemeral

3.若某创建Leader节点成功,则该客户端成功竞选为Leader

4.若创建Leader节点失败,则竞选Leader失败,在/chroot/leader节点上注册existwatch,一旦该节点被删除则获得通知

5.Leader可通过删除Leader节点来放弃Leader

6.如果Leader宕机,由于Leader节点被设置为ephemeralleader节点会自行删除除。而其它节点由于在Leader节点上注册了watch,故可得到通知,参与下一轮竞选,从而保证总有客户端以Leader角色工作

 

先到先得,后则监视前者——公平模式

1.创建Leader父节点,如/chroot。并将其设置为persist节点

2.各客户端通过在/chroot下创建Leader节点,如/chroot/leader,来竞争Leader。该节点应被设置为ephemeral_sequential

3.客户端通过getChildren方法获取/chroot/下所有子节点,如果其注册的节点的id在所有子节点中最小,则当前客户端竞选Leader成功

4.否则,在前面一个节点上注册watch,一旦前者被删除,则它得到通知,返回step3

5.Leader节点可通过自行删除自己创建的节点以放弃Leader

 

Leader ElectionCurator中实现(Curator提供2种实现)

 

 

Kafka基于ControllerLeader Election

基于ControllerLeader Election

》整个集群中选举出一个Broker作为Controller

Controller为所有的Topic的所有Partition指定LeaderFollower

优点

》极大缓解Herd Effect问题

》减轻Zookeeper负载

ControllerLeaderFollower间通过RPC通信,高效且实时

缺点

》引入Controller增加了复杂度

》需要考虑ControllerFailover

注:Kafka 0.8.2之前的版本KafkaLeader Election是由每个Patition的多个Replica同时竞争Leader

 

接下来我们讲讲Kafka Controller,下面是Kafka的一部分源码,主要是讲Controller

  //每个server启动起来之前都要先启动kafkaController

我们进去看看

//这部分功能是监控eclectionPath,也就是ControllerPath,观察是否有数据变化

//如果有数据变化,就进入elect函数,立马做一次选举

 

我们看怎么选举的

//不管当前有没有Controller,先获取leader信息,再去判断Controller是否是leader

 

 

Controller Failover

Controller挂了,如果Controllerleader,那么新的Controller会告诉所有的和leader有关的follower新的leader,通过RPC的方式。

转载于:https://www.cnblogs.com/WardSea/p/7420302.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值