ConsumerCoordinator 的几种状态和 GroupCoordinator 的几种状态的区别是什么?

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 消费者完成分区分配并同步结果。
StableRebalance 完成,组内所有消费者开始正常消费。
Dead组已被删除,元数据被移除。

三、核心区别总结

对比维度ConsumerCoordinator(客户端)GroupCoordinator(服务端)
所在位置消费者客户端Kafka Broker
状态数量4 种5 种
状态含义关注消费者自身状态(是否加入、是否 Rebalance)关注整个消费组的状态(是否有成员、是否 Rebalance)
状态粒度较粗,面向单个消费者较细,面向整个消费组
状态触发由服务端状态变化或本地事件触发由消费者加入、离开、心跳超时等事件触发

四、举个例子帮助理解

假设一个消费组有 3 个消费者:

  • 服务端(GroupCoordinator) 的状态变化可能是:Empty → PreparingRebalance → CompletingRebalance → Stable
  • 每个消费者(ConsumerCoordinator) 的状态变化是:UNJOINED → REBALANCING → STABLE

当某个消费者掉线时:

  • 服务端状态从 Stable → PreparingRebalance
  • 每个在线消费者的状态从 STABLE → REBALANCING
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值