标准答案
- 同一消费者组内,一个分区在同一时刻通常只分配给一个消费者;分区数决定了该组可利用的并行度上限。
- 消费者加入、退出、超时或订阅变化时,协调者会重新分配分区;重平衡期间部分客户端会暂停拉取或处理。
- 处理完成后再提交位点通常是至少一次语义,崩溃恢复时可能重复;先提交位点可能丢失尚未完成的业务处理。
- 应通过稳定的成员标识、合理的心跳和拉取配置减少不必要的重平衡,并让消费逻辑具备幂等性。
题目解析
重平衡不是单纯的网络抖动,它会改变分区归属、处理并行度和提交边界。排查时要同时看成员变化、分区分配、处理耗时和消费延迟。
增加消费者不能突破分区数上限;如果下游处理慢,扩容消费者还可能把压力集中转移到数据库或外部 API。
常见误区
- 误区:认为消费者越多吞吐一定越高。改正:并行度受分区数、处理线程、连接池和下游容量共同限制。
- 误区:把重平衡期间的停顿直接当成消息丢失。改正:先检查成员变化、位点和重新分配结果,再区分暂停、重复和真正丢失。
- 误区:只调大消费并发,不处理重复消费和下游容量。改正:先验证位点提交、幂等和下游预算,再逐步增加并行度。