MST

星途 面试题库

面试题:消息队列之RocketMQ负载均衡机制 - 基础原理

简述RocketMQ中消费者端的负载均衡机制是如何实现的,包括Rebalance的触发条件以及大致流程。
15.1万 热度难度
后端开发消息队列

知识考点

AI 面试

面试题答案

一键面试

消费者端负载均衡机制实现

  1. 队列分配:RocketMQ 消费者端采用一种基于消费者组的负载均衡策略。每个消费者组内的消费者会共同消费一组队列。消费者通过向 NameServer 获取 Topic 的路由信息,知晓该 Topic 下有哪些队列。
  2. 负载算法:默认采用平均分配算法,尽量将队列平均分配给消费者组内的各个消费者。例如,若有 3 个消费者,10 个队列,则会按照一定顺序尽量均匀分配,每个消费者大致消费 3 - 4 个队列。

Rebalance触发条件

  1. 消费者实例变化:包括新的消费者实例加入消费者组,或者已有消费者实例因为故障下线等原因离开消费者组。
  2. 订阅关系变化:消费者组内某个消费者的订阅 Topic 或者 Tag 发生改变。
  3. 队列变化:Topic 的队列数量发生变化,如动态扩容或缩容。

Rebalance大致流程

  1. 感知变化:消费者通过心跳机制向 Broker 发送心跳包,Broker 会将消费者的状态变化(如新增、下线等)反馈给 NameServer。消费者也会定时从 NameServer 获取最新的 Topic 路由信息,从而感知到队列变化等情况。
  2. 发起 Rebalance:当感知到上述触发条件中的变化时,消费者会发起 Rebalance 操作。消费者组内的每个消费者会计算自己应该消费哪些队列。
  3. 队列重新分配:每个消费者根据负载均衡算法(如平均分配)计算出新的队列分配方案。
  4. 消费调整:消费者根据新的队列分配结果,停止消费原分配队列,开始消费新分配的队列,完成 Rebalance 过程,从而实现消费者端的负载均衡。