美文网首页
原来Kafka中的选举有这么多?

原来Kafka中的选举有这么多?

作者: packet | 来源:发表于2019-04-18 11:23 被阅读0次

    kafka中的选举可以分成三类:

    1. 控制器的选举
    2. 分区leader的选举
    3. 消费者的选举

    在集群中,会有一个broker被选举为控制器(Kafka Controller),它负责管理集群中的分区和副本,比如某分区的leader出现故障,控制器负责选举新的leader。再比如当检测到某个分区的ISR集合发生变化时,由控制器负责通知所有broker更新其元数据信息。
    控制器(Kafka Controller)是由zookeeper实现的。

    分区leader副本的选举是由控制器管理的。当创建分区(创建主题或增加分区都有创建分区的动作)或分区上线(比如分区中原先的leader副本下线,此时分区需要选举一个新的leader上线来对外提供服务)的时候都需要执行leader的选举动作。

    组协调器GroupCoordinator需要为消费组内的消费者选举出一个消费组的leader,这个选举的算法也很简单,分两种情况分析。如果消费组内还没有leader,那么第一个加入消费组的消费者即为消费组的leader。如果某一时刻leader消费者由于某些原因退出了消费组,那么会重新选举一个新的leader,这个重新选举leader的过程又更“随意”了,相关代码如下:

    //scala code.
    private val members = new mutable.HashMap[String, MemberMetadata]
    var leaderId = members.keys.head
    

    解释一下这2行代码:在GroupCoordinator中消费者的信息是以HashMap的形式存储的,其中key为消费者的member_id,而value是消费者相关的元数据信息。leaderId表示leader消费者的member_id,它的取值为HashMap中的第一个键值对的key,这种选举的方式基本上和随机无异。总体上来说,消费组的leader选举过程是很随意的。

    鸣谢:原来Kafka中的选举有这么多?

    相关文章

      网友评论

          本文标题:原来Kafka中的选举有这么多?

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