← 每日面试题 学习看板

什么是Kafka的渐进式重平衡?

面试题/03数据库中间件/06MQ/01Kafka/什么是Kafka的渐进式重平衡?.md

完整讲解(权威版)

第一部分:知识重点剖析

核心考点定位:考察对 Kafka Consumer Rebalance 机制的理解,尤其是 Eager 与 Cooperative 两种模式的区别,判断候选人是否了解 Kafka 3.x 的增量式 Rebalance 优化。

知识点拆解:

  1. Rebalance 的本质:Consumer Group 内 Partition 订阅关系的重新协商(不是消息在分区之间迁移)。触发条件:①组成员变动(加入/离开/超时);②订阅关系变化;③分区数变化。
  2. Eager 模式(旧):Rebalance 触发时组内所有消费者停止消费,全组完成分配后统一恢复——STW 模型,暂停时间长。
  3. Cooperative 模式(新,Kafka 2.4+):只让受影响的消费者暂停,未受影响的分区继续消费——增量式,最小化暂停范围。
  4. 三种分配算法:
  1. 核心痛点:Rebalance 期间整个组(或受影响部分)暂停消费,会造成消息堆积或延迟
Cooperative 是 Kafka 3.x 的默认推荐模式,通过 CooperativeSticky 分配算法实现最小迁移,把 Rebalance 停顿从「全组 STW」降到「局部 STW」。

第二部分:考察方向与延伸递进

考察方向:

延伸递进面试题:

  1. Rebalance 期间消息会丢吗? —— 不丢,消费者提交 offset 之前的消息会被重新消费(可能造成重复),业务侧要做幂等
  2. max.poll.interval.ms 的作用? —— 两次 poll 之间的最大间隔,超时未 poll 会被判定为「消费者故障」触发 Rebalance;默认 300000(5 分钟),业务处理慢要调大
  3. 如何减少 Rebalance 频率? —— 消费者数不超过分区数、消费者不要频繁启停、max.poll.records 不宜过大、业务单条处理时间不超 max.poll.interval.ms

第三部分:面试者参考回答(300-400 字口语化)

面试官您好,Kafka 的 Rebalance 本质是 Consumer Group 内 Partition 订阅关系的重新协商,不是消息在分区之间迁移。触发条件有三类:组成员变动、订阅关系变化、分区数变化。

Rebalance 有两个模式:Eager 是旧模式,触发时整个组停止消费,等全部分配完再统一恢复,暂停时间长;Cooperative 是新模式(Kafka 2.4+),只让受影响的消费者暂停,未受影响的分区继续消费,属于增量式。生产上推荐用 Cooperative 模式。

分配算法有三种:Range 按分区数均分(需排序),RoundRobin 按顺序循环分配,CooperativeSticky 是 Kafka 2.4+ 默认,最小迁移并兼容 Cooperative 模式——同一个消费者尽量保留原有分区,只迁受影响的分区。

Rebalance 期间整个组暂停消费,会造成短暂的堆积或延迟,但消息不会丢——只是提交 offset 之前的消息会被重新消费,所以业务侧要做幂等。生产中减少 Rebalance 频率的做法:消费者数不超过分区数、消费者不要频繁启停、max.poll.records 不宜过大、业务单条处理时间不超 max.poll.interval.ms(默认 5 分钟)。

当然,即使有 Cooperative 模式,频繁 Rebalance 依然是 Kafka 消费的痛点,大规模部署时还是要靠稳定的消费者组和合理的配置来兜底。


面试记录 2026-10-25

评分:⭐⭐⭐☆☆(3/5)

我的回答

渐进式重平衡就是在 Kafka 中由于消费者和 Topic 或 Topic 分区之间的关系发生变动,需要重新匹配关系的过程。原本是一次完全的重新分配,所有消息暂停,等消费者和 Topic 分区完成匹配后再重新恢复消息发送;但渐进式的重平衡并不是全量的消费者消息停止,而是只有需要变更分区或者变更消费者的部分进行迁移,其他的部分不做迁移。

点评

优点:

不足:

补充: