目录
4. CooperativeStickyAssignor 分区分配策略
消费者组协调器
1. 组协调器(Group Coordinator)
组协调器是 Kafka 群组的中央处理器,负责协调组成员之间的 Rebalance 过程。它的主要功能包括:
-
Leader 选举:负责选举消费者组的领导者(Leader),领导者负责在 Rebalance 时协调分配和重新分配资源。
-
处理 JoinGroupRequest:当消费者加入消费者组时,向组协调器发送 JoinGroupRequest 请求,协调器负责处理这些请求,并制定新的资源分配方案。
-
SyncGroupResponse 同步:在 Rebalance 过程中,协调器向消费者组成员发送 SyncGroupResponse,告知它们分配的分区情况。
-
心跳管理:协调器维护与消费者的心跳信息,确保消费者组的健康状态,例如检测消费者是否在线或处于故障状态。
-
位移管理:管理消费者的消费位移,并将位移信息保存到 Kafka 的内部主题(例如 __consumer_offsets)中,以便消费者可以在重新加入组时恢复其消费进度。
2. __consumer_offsets 主题
__consumer_offsets 主题用于存储消费者组的消费位移信息。每个消费者组都有一个或多个分区用于保存其消费位移。组协调器会定期更新这些位移信息,并确保它们可靠地存储在 Kafka 集群中。
3. Rebalance
Rebalance 是指在消费者加入或离开消费者组时发生的事件。这时组协调器会根据分配策略重新分配分区或任务,以保持各成员的负载均衡。
消费者组的启动流程详解
1. 查找 Coordinator
当消费者启动时,它需要找到负责管理其消费者组的组协调器(Group Coordinator)。具体步骤如下:
- 每个消费者会向任意一个 Broker 节点发送一个 findCoordinator 请求,请求中包含其 group.id,这是消费者组的唯一标识。
- Broker 节点根据 group.id 计算出一个哈希值,并将其与 Kafka 内部主题 __consumer_offsets 的分区数取模,确定该消费者组对应的分区。
- 消费者组的每个分区的 Leader 副本所在的 Broker 节点即是该消费者组的 Group Coordinator。