ConsumerCoordinator(客户端)和 GroupCoordinator(服务端)虽然名字相似,但一个是运行在消费者客户端的协调器,另一个是运行在 Kafka Broker 上的服务端协调器。它们各自维护着不同的状态机,用于协调消费者组的管理和 Rebalance 过程。
下面分别介绍它们的状态及其区别:
一、ConsumerCoordinator(客户端)状态
ConsumerCoordinator 是 Kafka 消费者客户端中的一个组件,负责与 GroupCoordinator 通信,管理消费者的加入、心跳、分区分配等操作。
ConsumerCoordinator 的状态定义在 AbstractCoordinator 中的内部类 MemberState,主要包括以下四种状态:
| 状态名 | 含义 |
|---|---|
| UNJOINED | 初始状态,消费者尚未加入消费组。 |
| REBALANCING | 正在 Rebalance,等待服务端分配分区。 |
| STABLE | 已成功加入消费组,分区分配完成,处于稳定状态。 |
| PREPARING_REBALANCE | 准备 Rebalance,通常由服务端状态变化触发。 |
二、GroupCoordinator(服务端)状态
GroupCoordinator 是 Kafka Broker 上的服务端组件,负责管理整个消费者组的状态,包括成员加入、离开、分区分配等。
GroupCoordinator 的状态定义在 GroupMetadata 中,主要包括以下五种状态:
| 状态名 | 含义 |
|---|---|
| Empty | 组内没有任何成员,但可能还保留 offset 信息。 |
| PreparingRebalance | 正在准备 Rebalance,等待所有消费者重新加入。 |
| CompletingRebalance(或 AwaitingSync) | 所有消费者已加入,等待 leader 消费者完成分区分配并同步结果。 |
| Stable | Rebalance 完成,组内所有消费者开始正常消费。 |
| Dead | 组已被删除,元数据被移除。 |
三、核心区别总结
| 对比维度 | ConsumerCoordinator(客户端) | GroupCoordinator(服务端) |
|---|---|---|
| 所在位置 | 消费者客户端 | Kafka Broker |
| 状态数量 | 4 种 | 5 种 |
| 状态含义 | 关注消费者自身状态(是否加入、是否 Rebalance) | 关注整个消费组的状态(是否有成员、是否 Rebalance) |
| 状态粒度 | 较粗,面向单个消费者 | 较细,面向整个消费组 |
| 状态触发 | 由服务端状态变化或本地事件触发 | 由消费者加入、离开、心跳超时等事件触发 |
四、举个例子帮助理解
假设一个消费组有 3 个消费者:
- 服务端(GroupCoordinator) 的状态变化可能是:
Empty → PreparingRebalance → CompletingRebalance → Stable。 - 每个消费者(ConsumerCoordinator) 的状态变化是:
UNJOINED → REBALANCING → STABLE。
当某个消费者掉线时:
- 服务端状态从
Stable → PreparingRebalance, - 每个在线消费者的状态从
STABLE → REBALANCING。
940

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



