Kafka Leader选举流程和选举策略

思考几个问题

  1. 什么是分区状态机?
  2. 创建Topic的时候如何选举Leader?
  3. 分区的所有副本都不在线, 这个时候启动一台之前不在ISR内的副本,它会当选为Leader吗?
  4. 当所有副本都不在线,然后一个一个重启Broker上副本上线,谁会当选为Leader?谁先启动就谁当选吗?
  5. Broker下线了,Leader切换给了其他副本, 当Broker重启的时候,Leader会还给之前的副本吗?
  6. 选举成功的那一刻, 生产者和消费着都做了哪些事情?
  7. Leader选举期间对分区的影响

 

分区Leader选举流程分析

在开始源码分析之前, 大家先看下面这张图, 好让自己对Leader选举有一个非常清晰的认知,然后再去看后面的源码分析文章,会更容易理解。

整个流程分为三大块

  1. 触发选举场景 图左
  2. 执行选举流程 图中
  3. Leader选举策略 图右

 

什么是分区状态机

所有的分区状态的流转都是通过分区状态机来进行的, 统一管理! 每个分区状态的流转 都是有严格限制并且固定的,流转到不同状态需要执行的操作不一样, 例如 当分区状态流转到 <font color=blue>OnlinePartition </font> 的时候, 就需要判断是否需要执行 Leader选举 ,

创建Topic的时候如何选举Leader?

创建Topic的时候并没有发生 Leader选举, 而是默认将 在线的第一个副本设置为Leader,所有在线的副本列表 为 ISR 列表。 写入到了zookeeper中。

 

分区的所有副本都不在线, 这个时候启动一台之前不在ISR内的副本的Broker,它会当选为Leader吗?

视情况而定。
首先, 启动一台Broker, 会用什么策略选举?
看上面的图,我们可以知道是OfflinePartitionLeaderElectionStrategy
然后看下这个策略是如何选举的?

那么最终结果就是:
所有副本不在线,那么一个Leader的候选者都当选不了
那么这个时候就会判断 unclean.leader.election.enable 配置是否为true.
如果是true, 则当前在线的副本就是只有自己这个刚启动的在线副本,自然而然就会当选Leader了。
如果是fase, 则没有副本能够当前Leader, 次数处于一个无Leader的状态。

当所有副本都不在线,然后一个一个重启Broker上副本上线,谁会当选为Leader?谁先启动就谁当选吗?

不是, 跟上一个问题同理
根据  unclean.leader.election.enable 配置决定。
如果是true, 则谁先启动,谁就当选(会丢失部分数据)
如果是false,则第一个在ISR列表中的副本当选。
顺便再提一句, 虽然在这里可能不是AR中的第一个副本当选Leader。

但是最终还是会自动执行Leader均衡的,自动均衡使用的策略是
PreferredReplicaPartitionLeaderElectionStrategy
(前提是开启了自动均衡:  auto.leader.rebalance.enable=true)

Broker下线了,Leader切换给了其他副本, 当Broker重启的时候,Leader会还给之前的副本吗?

根据配置  auto.leader.rebalance.enable=true 决定。
true: 会自动执行Leader均衡, 自动均衡策略是   PreferredReplicaPartitionLeaderElectionStrategy策略
false: 不执行自动均衡。 那么久不会还回去。
关于更详细的 Leader均衡机制请看  Leader 均衡机制

Leader选举期间对分区的影响

Leader的选举基本上不会造成什么影响, Leader的切换非常快, 每个分区不可用的时间在几毫秒内。

原文:kafaka分区leader选举 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值