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

2019-04-18  本文已影响0人  packet

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中的选举有这么多?

上一篇下一篇

猜你喜欢

热点阅读