美文网首页数客联盟Kafka
KafkaLeader选举时机和选举策略

KafkaLeader选举时机和选举策略

作者: WestC | 来源:发表于2018-04-26 17:32 被阅读9次

    Kakfa的集中leader选举过程

    • Kafka是分布式的消息分发系统,通过引入topic的概念来区分消息类型,引入partition的概念来增加消息的吞吐量,引入replica的概念来提高消息的可靠性。在多replica的场景下,消息的读写都是通过leader来完成,其他replica则是通过从leader读取数据来完成消息的同步以保证leader异常时消息的完善性。 然而在多个replica的场景下,谁能成为leader? leader异常后,又如何选出新的leader呢这是kafka提供可靠服务的关键所在。下面就对此作简要分析。

    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即可

    相关文章

      网友评论

        本文标题:KafkaLeader选举时机和选举策略

        本文链接:https://www.haomeiwen.com/subject/eqemlftx.html