kakfa消费者组集群化原理
kafka怎样选出leader消费者?
本文主要介绍 kafka consumer组是通过什么机制,选择出leader和follower消费者?
一、怎样为每个消费者组选择出唯一协调者?
从源码看看怎样选出唯一的协调者?

每个消费者,分别随机找一个broker进行通信,询问这个broker的找出该消费者组的协调者是谁。
如何做到这步:consumer内部一个coordinator类,负责消费者协调工作。
coordinator.ensureCoordinatorReady(),发送寻找组协调者的请求sendGroupCoordinatorRequest,消息类型是 GROUP_COORDINATOR

broker收到请求后, kafkaApis进行处理:




总结
意思是:使用组名称的hash值%这个topic的分区数量,得到指定的一个分区,这个分区leader所在节点就是组协调者的节点,所有消费者计算出的协调者节点都是一样的
二、协调者从消费者组中选出leader消费者
这个leader消费者的职责是什么?
leader消费者的职责: 制定消息消费的方案,发给协调者的broker
非leader的消费者:协调者通知它是follower,就发消息给协调者,等待分区分配
协调者:收到leader分配方案,等待所有本组消费者到期,分配消息消费方案
leader consumer如何和非leader节点的consumer进行通信?
通过协调者broker
为什么采取协调者这种机制,还有其他方案吗?
consumer之间没有直接通信,降低架构发复杂度
其他方案:如果不进行新的技术,采用在zk上精选leader也是可以的,缺点:zk的读写就会变多,选举压力转移到zk上。
总结
提示:这里对文章进行总结:

选举主消费者是通过broker协调者,broker协调者选举leader,leader指定消息消费方案,下发给协调者,协调者把方案下发给所有消费者(包括leader消费者)。
与现实生活对照就像:选举一个领导,leader消费者是二把手,二把手指定任务计划,提交给领导,领导再下发任务,二把手也要干活。
本文深入探讨了Kafka消费者组中如何选举出leader消费者以及协调者的作用。首先,每个消费者通过与任意broker通信确定组协调者,协调者由消费者组名称的hash值对topic分区数取模决定。然后,协调者选中一个消费者作为leader,负责分配消息消费任务。leader消费者制定消费方案并提交给协调者,协调者再将方案广播给所有成员。这种机制避免了消费者间直接通信,简化架构。其他可能方案包括使用Zookeeper进行协调,但会增加其负载。

451

被折叠的 条评论
为什么被折叠?



