面试题答案
一键面试Kafka消费者组重平衡触发条件
- 消费者成员变化
- 新增消费者:当新的消费者实例加入到消费者组时,为了重新合理分配分区,会触发重平衡。例如,在应用扩容时,增加了新的消费者进程,Kafka需要将已有分区重新分配给新加入的消费者和原有的消费者。
- 消费者离开:消费者正常关闭、崩溃或因网络问题与Kafka集群断开连接时,该消费者负责消费的分区需要重新分配给其他存活的消费者,从而触发重平衡。比如,某个消费者所在的服务器突然断电,Kafka需要对该消费者之前负责的分区进行重新分配。
- 订阅主题分区变化
- 主题分区增加:如果管理员对主题进行扩容,增加了新的分区,Kafka需要将这些新分区分配给消费者组内的成员,进而触发重平衡。例如,业务量增长,为了提高消费并行度,给某个主题增加了分区。
- 主题分区减少:虽然这种情况较少见,但在某些特殊场景下,如主题收缩,减少了分区数量,也会触发重平衡,以调整消费者对分区的分配。
重平衡过程中消费者组内各成员的状态变化
- PREPARING_REBALANCE(准备重平衡)
- 消费者组中的所有成员接收到重平衡通知,停止从分配到的分区消费消息。此时,消费者处于一种过渡状态,不再处理新消息,但还未开始重新分配分区。
- COMPLETING_REBALANCE(完成重平衡)
- 消费者组内的协调者(Coordinator)开始执行分区重新分配算法,根据消费者组内成员数量和当前可用分区,为每个消费者重新分配分区。
- 每个消费者等待协调者分配新的分区。一旦收到分配结果,消费者进入新的稳定状态。
- STABLE(稳定)
- 消费者成功获取到新分配的分区后,开始从这些分区消费消息。在这个状态下,消费者持续处理分配到的分区中的消息,直到下一次重平衡被触发。