面试题答案
一键面试1. 集群模式
- 特点:
- 同一个消费组内的多个消费者共同消费主题中的消息,平均分摊消息量,提高消费效率。
- 每个消息只被消费组内的一个消费者消费,保证消息不会被重复消费(在消费组维度)。
- 应用场景:适用于对消息处理性能要求较高,且不希望消息被重复处理的场景,比如订单处理、数据统计等业务场景。
2. 广播模式
- 特点:
- 主题中的每条消息都会被消费组内的所有消费者消费,每个消费者都能完整地接收到所有消息。
- 消息会被重复消费,消费组内各消费者之间相互独立,没有负载均衡概念。
- 应用场景:适用于需要所有消费者都处理相同消息的场景,如系统配置更新、消息通知所有客户端等。
3. 集群模式下消费者负载均衡大致流程
- 注册与发现:
- 消费者启动时,会向NameServer注册自己的信息,包括消费组、订阅主题等。
- NameServer保存这些消费者信息,同时生产者和其他组件也可以从NameServer获取消费者的注册信息。
- 获取Topic路由信息:
- 消费者从NameServer获取所订阅Topic的路由信息,包括该Topic的队列分布在哪些Broker上。
- 负载均衡分配:
- 同一消费组内的消费者通过某种负载均衡算法(如平均分配算法)来分配Topic中的队列。例如,假设有3个消费者C1、C2、C3,Topic中有6个队列Q1 - Q6,按照平均分配,C1可能分配到Q1、Q2,C2分配到Q3、Q4,C3分配到Q5、Q6。
- 常见的负载均衡算法有:
- 平均分配算法:根据消费者数量和队列数量进行平均划分。
- 环形分配算法:将所有消费者和队列想象成一个环,依次分配队列给消费者。
- 消息消费:
- 每个消费者负责消费分配给自己的队列中的消息。消费者与Broker建立长连接,从分配的队列拉取消息并进行处理。
- 动态调整:
- 当消费组内有新的消费者加入或者有消费者下线时,会触发重新负载均衡。例如有新消费者C4加入,系统会重新计算分配,可能将C1 - C3中的部分队列分配给C4,以达到新的负载均衡状态。