
翻译:https://www.confluent.io/blog/kip-848-consumer-rebalance-protocol/
消费者组(The consumer group)是 Apache Kafka® 的基石之一,它通过让多个消费者实例共同读取主题分区来实现可扩展、容错的流数据消费。消费者重平衡协议(The consumer rebalance protocol)就是在组内协调“哪些分区分配给哪些消费者”的机制。
历史上,Kafka 一直使用我们如今称为“经典(classic)”的重平衡协议( classic rebalance protocol)。该协议最初以“eager”分配策略为主,采用“stop-the-world”思想:只要组成员变化(消费者加入或离开)或主题元数据发生变更,所有消费者就先停止工作,交出所有分区;由 leader 计算新的分配方案,再全量重新分发,处理才能继续。这种机制在动态环境中会造成显著停机。
为了缓解这一问题,经典协议后来引入了cooperative(协作式)分配策略(the cooperative assignment strategy )。协作式重平衡(Cooperative rebalancing)让未受变更影响的分区继续保留在消费者手中,只收回需要重新分配的分区,从而缩短停机时间。然而,无论是否使用协作式策略,经典协议仍依赖“组级同步屏障”和客户端主导的逻辑,重平衡往往需要多轮通信、带来延迟,并在分区与消费者数量巨大时显著增加运维复杂度——这些痛点对高可用、低延迟应用尤为致命。
KIP-848 直面上述挑战,提出一个可选的、全新的消费者重平衡协议,汲取过去经验,专为现代大规模流处理设计。
该协议随 Apache Kafka 4.0、Confluent Cloud 及 Confluent Platform 8.0 一起发布。KIP-848 重新设计了消费者与 Broker 在重平衡时的交互方式,其核心创新是真正增量/异步的协议,将协调逻辑从客户端移至 Broker 端的 Group Coordinator。
在 Apache Kafka 4.0、Confluent Cloud 以及 Confluent Platform 8.0 中,KIP-848 协议对消费者与 Broker 之间的重平衡交互进行了重新设计。KIP-848 凭借其核心创新,成为真正意义上的增量/异步协议,将协调逻辑从客户端迁移至 Broker 端的 Group Coordinator。
经典协议与 KIP-848 新协议在关键处理流程上的差异汇总如下:
经典 - Eager | 经典 - Cooperative | KIP-848 新协议 | |
|---|---|---|---|
对应用影响(Application Impact) | 全停机的 stop-the-world 事件 | 部分 stop-the-world,消费者滞后累积(因无法提交位移) | 无 stop-the-world, 未被改动的分区继续处理 |
Fetch 处理 | 重平衡期间暂停 | 重平衡期间可继续 | 重平衡期间可继续 |
Commit 处理 | 重平衡期间暂停 | 重平衡期间暂停 | 重平衡期间可继续 |
消费者影响 | 组内所有消费者受影响 | 组内所有消费者受影响 | 仅部分消费者受影响 |
新协议不再由客户端通过多轮 JoinGroup/SyncGroup 阶段来协调,而是采用持续的 心跳(heartbeat) 机制与服务端驱动的 协调(reconciliation) 流程:
group.consumer.session.timeout.ms)、心跳间隔(group.consumer.heartbeat.interval.ms)等关键参数改为在服务端按组动态配置,简化客户端部署。客户端只需提供 rebalance.timeout.ms(基于 max.poll.interval.ms)表示其完成分区回收所需的最大时间,并可选择 group.remote.assignor 指定要使用的服务端分配器。升级步骤简单明了:
group.protocol=consumer。partition.assignment.strategy、session.timeout.ms、heartbeat.interval.ms。协议支持在线升级或离线升级。在线升级可通过滚动重启消费者实例完成。当第一个设置 group.protocol=consumer 的消费者加入仍使用经典协议的组时,Group Coordinator 会自动将该组切换到新协议。对于未升级的客户端,Coordinator 会透明代理其经典协议请求,与已升级客户端的新协议消息并存(前提是经典组使用标准分配器且无自定义元数据)。注意:同一消费者组内临时混合两种协议仅用于在线升级过渡。
新的消费者重平衡协议已在 Apache Kafka、Confluent Cloud 正式发布,并将随 Confluent Platform 8.0 全面推出。基于 librdkafka 的客户端也已提供 Early Access(librdkafka 2.10)。后续增强包括客户端性能优化、在获取与提交位移时全面支持 topic ID。Kafka Streams 将通过 KIP-1071 享受同样的收益;Kafka Connect 与 Schema Registry 未来亦将默认采用此协议。
鉴于其显著优势,KIP-848 将在未来的 Apache Kafka 大版本(很可能为 5.0)中成为默认重平衡协议。
KIP-848 消费者重平衡协议是 Apache Kafka 的一次重大飞跃,它直击经典协议的痛点。通过将协调逻辑迁移到服务端并实现增量、服务端驱动的协调,该协议带来更快的重平衡、更稳定可扩展的消费者组,显著降低运维负担,提升 Kafka 应用的可用性与性能。