数客联盟Kafka

KafkaLeader选举时机和选举策略

2018-04-26  本文已影响9人  WestC

Kakfa的集中leader选举过程

Leader选举器

Kafka通过leaderSelector完成leader的选举。

可能触发为partition选举leader的场景有: 新创建topic,broker启动,broker停止,controller选举,客户端触发,reblance等等 场景。在不同的场景下选举方法不尽相同。Kafka提供了五种leader选举方式,继承PartitionLeaderSelector,实现selectLeader方法完成leader的选举, 下面对这五种leader选举方式给予说明:

NoOpLeaderSelector

该选举器不会调用到,大概是拿来测试用的。 该选举器直接返回当前的leader Irs,AR。

OfflinePartitionLeaderSelector

触发场景:
    * 新创建topic
    * PartitionStateMachine启动
    * broker启动时
    * ReplicaStateMachine检测到broker的znode“被删除”
选举:
    1) Isr列表中有存货的replica,直接选出
    2) 否则,unclean.leader.election.enable 为false,抛出异常
    3) 存活的ar中有replica,选出,否则抛出异常

ControlledShutdownLeaderSelector

触发场景:
    * kafka的broker进程政策退出发送消息给controller,controller触发
选举:
    * 在isr列表中的选出存活的replica,否则抛出异常

PreferredReplicaPartitionLeaderSelector

触发场景:
    * znode节点/admin/preferred_replica_election写入相关数据
    * partition-rebalance-thread线程进行触发reblance时
    * 新产生controller
选举 :
    1) AR中取出一个作为leader,如果与原有leader一样,抛出异常
    2) 新leade的replica的broker存活且replica在isr中,选出,否则抛出异常

ReassignedPartitionLeaderSelector

触发场景:
    * znode节点LeaderAndIsr发生变化
    * Broker启动时
    * zknode节点/admin/reassign_partitions变动
    * 新产生controller时
选举:
    * 新设置的ar中,存在broker存活的replica且replica在isr中则选出为leader,否则抛出异常

PS: 在所有的leader选举策略中,如果符合条件的replica有多个,如Seq[int],则使用的是Seq.head,取的是seq的第一个

Kafka的leader选举过程逻辑较为简单,参考kafka.controller.PartitionLeaderSelector.scala即可

上一篇下一篇

猜你喜欢

热点阅读