面试题答案
一键面试消费者负载均衡策略基本工作原理
Kafka 消费者负载均衡的核心目的是将分区均匀分配给消费者实例,以高效消费数据。当新消费者加入或已有消费者离开时,会触发再均衡机制,重新分配分区。
主要组件
- 消费者组(Consumer Group): 多个消费者实例共同组成一个消费者组,它们共同消费一组主题(Topic)的不同分区。每个分区在同一时间只会被组内的一个消费者实例消费。
- 协调者(Coordinator):
- Kafka 为每个消费者组选举一个协调者,协调者负责管理消费者组的状态,包括成员列表、分区分配方案等。
- 协调者在 Kafka 集群的 Broker 节点上运行。
- 消费者实例(Consumer Instance): 每个运行的消费者程序实例,向协调者发送心跳以表明存活,并参与分区分配。
组件协作实现负载均衡
- 加入组(Join Group):
- 当消费者实例启动时,它会向协调者发送
JoinGroupRequest
请求,表明自己想加入特定的消费者组。 - 协调者收到请求后,为该消费者分配一个临时成员 ID,并将当前组内所有成员(包括新加入的消费者)的信息收集起来。
- 当消费者实例启动时,它会向协调者发送
- 选举领导者(Elect Leader):
- 协调者从组内成员中选举出一个领导者(Leader)。通常,第一个加入组的消费者成为领导者。
- 领导者负责制定分区分配方案,它会根据消费者实例的订阅信息、消费者的数量等因素,计算出如何将主题的各个分区分配给组内的消费者实例。
- 同步组(Sync Group):
- 领导者将计算好的分区分配方案通过
SyncGroupRequest
发送给协调者。 - 协调者再将这个分配方案转发给组内的所有消费者实例,消费者实例根据这个方案开始消费分配给自己的分区。
- 领导者将计算好的分区分配方案通过
- 心跳机制与再均衡:
- 消费者实例定期向协调者发送心跳(通过
HeartbeatRequest
),以表明自己存活。 - 如果协调者在一定时间内没有收到某个消费者实例的心跳,会认为该消费者实例已死亡,触发再均衡。此时,协调者会通知组内所有消费者实例重新进行加入组、选举领导者、制定分配方案等流程,重新分配分区,以保证负载均衡。
- 同样,当有新的消费者实例加入组时,也会触发再均衡过程,重新分配分区。
- 消费者实例定期向协调者发送心跳(通过