当前位置: 首页 >  技术宝典 >  RocketMQ消费者是如何负载均衡的

RocketMQ消费者是如何负载均衡的

导读:摘要:RocketMQ 支持两种消息模式:集群消费( Clustering )和广播消费( Broadcasting )。.本文分享自华为云社区《一文讲透RocketMQ消费者是如何负载均衡的》,作者:勇哥java实战分享。.RocketMQ 支持两种消息模式:集群消费 ( Cl

摘要:RocketMQ 支持两种消息模式:集群消费( Clustering )和广播消费( Broadcasting )。

本文分享自华为云社区《一文讲透RocketMQ消费者是如何负载均衡的》,作者:勇哥java实战分享。

RocketMQ 支持两种消息模式:集群消费 ( Clustering )和广播消费 ( Broadcasting )。

集群消费:同一 Topic 下的一条消息只会被同一消费组中的一个消费者消费。 也就是说,消息被负载均衡到了同一个消费组的多个消费者实例上。

广播消费: 当使用广播消费模式时,每条消息推送给集群内所有的消费者,保证消息至少被每个消费者消费一次。

我们重点讲解下集群消费的消费流程 ,因为集群消费是使用最普遍的消费模式,理解了集群消费,广播消费也就能顺理成章的掌握了。

集群消费示例代码里,启动消费者,我们需要配置三个核心属性:消费组名、订阅主题、消息监听器 ,最后调用 start 方法启动。

消费者启动后,我们可以将整个流程简化成:

消费端的负载均衡是指将 Broker 端中多个队列按照某种算法分配给同一个消费组中的不同消费者。

负载均衡是每个客户端独立进行计算,那么何时触发呢 ?

  • 消费端启动时,立即进行负载均衡;
  • 消费端定时任务每隔 20 秒触发负载均衡;
  • 消费者上下线,Broker 端通知消费者触发负载均衡。

负载均衡流程如下:

1、发送心跳

消费者启动后,它就会通过定时任务不断地向 RocketMQ 集群中的所有 Broker 实例发送心跳包(消息消费分组名称、订阅关系集合、消息通信模式和客户端实例编号 等信息)。

Broker 端在收到消费者的心跳消息后,会将它维护在 ConsumerManager 的本地缓存变量 consumerTable,同时并将封装后的客户端网络通道信息保存在本地缓存变量 channelInfoTable 中,为之后做消费端的负载均衡提供可以依据的元数据信息。

2、启动负载均衡服务

下图展示了按照主题负载均衡的代码片段:

负载均衡服务会根据消费模式为”广播模式”还是“集群模式”做不同的逻辑处理,这里主要来看下集群模式下的主要处理流程:

(1) 获取该主题下的消息消费队列集合;

(2) 查询 Broker 端获取该消费组下消费者 Id 列表;

(3) 先对 Topic 下的消息消费队列、消费者 Id 排序,然后用消息队列分配策略算法(默认为:消息队列的平均分配算法),计算出待拉取的消息队列;

这里的平均分配算法,类似于分页的算法,将所有 MessageQueue 排好序类似于记录,将所有消费端排好序类似页数,并求出每一页需要包含的平均 size 和每个页面记录的范围 range ,最后遍历整个 range 而计算出当前消费端应该分配到的记录。

(4) 分配到的消息队列集合与 processQueueTable 做一个过滤比对操作

消费者实例内 ,processQueueTable 对象存储着当前负载均衡的队列 ,以及该队列的消费快照。

标红的部分表示与分配到的消息队列集合互不包含,则需要将这些红色队列 Dropped 属性为 true , 然后从 processQueueTable 对象中移除。

绿色的部分表示与分配到的消息队列集合的交集,processQueueTable 对象中已经存在该队列。

黄色的部分表示这些队列需要添加到 processQueueTable 对象中,创建这些队列的消费快照。最后创建拉取消息请求列表,并将请求分发到消息拉取服务,进入拉取消息环节。

点击关注,第一时间了解华为云新鲜技术~

内容
  • 直播源码平台搭建技术分享之直播短信功能
    直播源码平台搭建技术分享之直播短
    2023-12-03
    从移动通信时代的早期,就有一个功能出现,他将天南海北的人们用文字信息连接起来,使人们不必去打电话去说,简单的输入文字就可
  • python实现两函数通过缩放,平移和旋转进行完美拟合
    python实现两函数通过缩放,
    2023-12-02
    Curve _fitting.前几天在工作的时候接到了一个需求,希望将不同坐标系,不同角度的两条不规则曲线,并且组成该曲
  • GitHub Actions CI/CD 工作流实战
    GitHub Actions C
    2023-12-02
    1. 什么是 GitHub Actions 与 workflow ?.GitHub Actions 是 GitHub 提
  • FlashDuty Changelog 2023-09-07 | 新增深色模式与主题配置
    FlashDuty Change
    2023-12-04
    FlashDuty:一站式告警响应平台,前往此地址免费体验!.FlashDuty.现在已经全面支持了深色模式,这为您提供
  • 拉普拉斯金字塔在多图HDR算法中的应用以及多曝光图像的融合算法简介。
    

SSE图像算法优化系列二十六:和时间赛跑之优化高斯金字塔建立的计算过程。
    拉普拉斯金字塔在多图HDR算法中
    2023-12-04
    在SSE图像算法优化系列二十九:基础的拉普拉斯金字塔融合用于改善图像增强中易出现的过增强问题(一).一文中我们曾经描述过
  • 基于ITIL的ITSM工具
    基于ITIL的ITSM工具
    2023-12-05
    随着企业的ITSM(IT服务管理)的逐渐成熟进而深入应用,如果您希望以低成本寻找一款基于ITIL的ITSM管理工具,然后