MST

星途 面试题库

面试题:消息队列RocketMQ消费者负载均衡策略之中等题

请简述RocketMQ消费者端的两种负载均衡模式(集群模式和广播模式)的特点及应用场景,并说明在集群模式下,消费者负载均衡的大致流程。
40.4万 热度难度
后端开发消息队列

知识考点

AI 面试

面试题答案

一键面试

1. 集群模式

  • 特点
    • 同一个消费组内的多个消费者共同消费主题中的消息,平均分摊消息量,提高消费效率。
    • 每个消息只被消费组内的一个消费者消费,保证消息不会被重复消费(在消费组维度)。
  • 应用场景:适用于对消息处理性能要求较高,且不希望消息被重复处理的场景,比如订单处理、数据统计等业务场景。

2. 广播模式

  • 特点
    • 主题中的每条消息都会被消费组内的所有消费者消费,每个消费者都能完整地接收到所有消息。
    • 消息会被重复消费,消费组内各消费者之间相互独立,没有负载均衡概念。
  • 应用场景:适用于需要所有消费者都处理相同消息的场景,如系统配置更新、消息通知所有客户端等。

3. 集群模式下消费者负载均衡大致流程

  1. 注册与发现
    • 消费者启动时,会向NameServer注册自己的信息,包括消费组、订阅主题等。
    • NameServer保存这些消费者信息,同时生产者和其他组件也可以从NameServer获取消费者的注册信息。
  2. 获取Topic路由信息
    • 消费者从NameServer获取所订阅Topic的路由信息,包括该Topic的队列分布在哪些Broker上。
  3. 负载均衡分配
    • 同一消费组内的消费者通过某种负载均衡算法(如平均分配算法)来分配Topic中的队列。例如,假设有3个消费者C1、C2、C3,Topic中有6个队列Q1 - Q6,按照平均分配,C1可能分配到Q1、Q2,C2分配到Q3、Q4,C3分配到Q5、Q6。
    • 常见的负载均衡算法有:
      • 平均分配算法:根据消费者数量和队列数量进行平均划分。
      • 环形分配算法:将所有消费者和队列想象成一个环,依次分配队列给消费者。
  4. 消息消费
    • 每个消费者负责消费分配给自己的队列中的消息。消费者与Broker建立长连接,从分配的队列拉取消息并进行处理。
  5. 动态调整
    • 当消费组内有新的消费者加入或者有消费者下线时,会触发重新负载均衡。例如有新消费者C4加入,系统会重新计算分配,可能将C1 - C3中的部分队列分配给C4,以达到新的负载均衡状态。