RocketMQ负载平衡机制解析!

  • 电脑网络维修
  • 2024-11-14

消费者在消费信息的时刻,要求知道从Broker的哪一个信息队列中去失掉信息。

所以,在消费者端必定要做负载平衡,即Broker端中多个消费队列调配给同一个消费者组中的哪些消费者消费。

在RocketMQ中,在消费者端有一个:Rebalance负载平衡组件。

消费者负载平衡

指为消费组下的每个消费者调配订阅主题下的消费队列,调配了消费队列消费者就可以知道去消费哪个消费队列上方的信息。

而集群形式一个信息队列同一期间只能调配给组内的一个消费者启动消费。

RocketMQ5.0以前是依照队列粒度启动负载平衡的,5.0提供了按信息粒度启动负载平衡。

队列粒度负载平衡

队列粒度负载平衡战略中,同一消费者组内的多个消费者将依照队列粒度消费信息,每个队列只能被其中一个消费者消费。

队列粒度负载平衡是在每个消费者端启动的,并不是由某个节点一致启动负载平衡之后将调配结果通知到每个消费者。

消费者参与或许缩小会影响信息队列的调配,所以Broker要求感知消费者的高低线状况。

消费者在启动时会向一切的Broker发送心跳包启动注册,通知Broker消费者上线,下线的时刻也会向Broker发送敞开注册的恳求。

Broker会保养消费者信息的注册信息,在消费者出现变卦时会通知消费者启动负载平衡。

Rebalance触发机遇

消费者启动时触发:

消费者在启动时会启动一次性负载平衡,为自己调配信息队列。

Broker发现消费组变卦时触发:

处于以下两种状况之一时会被判别为消费组出现了变动,要求启动负载平衡:

被判定为变动之后,会触发变卦事情,向该消费者下的一切消费者发送发送变卦恳求,通知组下每个消费者启动负载平衡。

Broker收到消费者下线时触发:

假设有消费者向Broker发送UNREGISTER_CLIENT敞开注册恳求,并且开启了准许通知变卦,会触发变卦事情。

变卦事情同上,Broker会通知该消费者组下的一切消费者启动一次性负载平衡。

消费者定时触发:

消费者自身也会定时口头负载平衡,自动是20s口头一次性。

信息粒度负载平衡

在RocketMQ5.0之后,参与了信息粒度负载平衡战略,自动且仅经常使用信息粒度负载平衡战略。

信息粒度负载平衡战略中,同一消费组内的多个消费者将依照信息粒度平均摊派主题中的一切信息。

信息粒度负载平衡战略保障同一个队列的信息可以被组内多个消费者独特处置。

然而该战略经常使用的信息调配算法结果是随机的,不能指定信息被哪一个特定的消费者处置。

所以多个消费者同时消费同一个信息队列中的信息,服务端也可以保障信息不会被多个消费者重复消费。

信息粒度负载平衡战略适用于绝大少数在线处置的业务场景,关于流式处置、聚算计算等场景,更适宜队列粒度的负载平衡战略。

口头流程

负载平衡服务口头逻辑在doRebalance函数,外面会对每个消费者组口头负载平衡操作。

consumerTable这个map对象里存储了消费者组对应的的消费者实例。

private ConcurrentMapString MQConsumerInner consumerTable  new ConcurrentHashMapString MQConsumerInner void doRebalance {//每个消费者组都有负载平衡 MapEntryString MQConsumerInner entry : thisconsumerTableentrySet {MQConsumerInner impl  entrygetValue impl   {try {impldoRebalance} catch Throwable e {logerror e}}}}

由于每个消费者组或许会消费很多topic,每个topic都有自己的不同队列,最终是按topic的维度启动负载平衡。

public void doRebalance(final boolean isOrder) {Map<String, SubscriptionData> subTable = this.getSubscriptionInner();if (subTable != null) {for (final Map.Entry<String, SubscriptionData> entry : subTable.entrySet()) {final String topic = entry.getKey();try {//按topic维度口头负载平衡this.rebalanceByTopic(topic, isOrder);} catch (Throwable e) {if (!topic.startsWith(MixAll.RETRY_GROUP_TOPIC_PREFIX)) {log.warn("rebalanceByTopic Exception", e);}}}}this.truncateMessageQueueNotMyTopic();}

最终负载平衡逻辑处置的实如今:

其中分为广播信息和集群信息模型两种状况处置。

负载平衡外围性能的干流程,重要做了4件事情:

负载平衡战略原理

负载平衡战略顶层接口:

 interface AllocateMessageQueueStrategy {/*** Allocating by consumer id* 给消费者id调配消费队列*/ListMessageQueue allocatefinal String consumerGroup final String currentCID final ListMessageQueue mqAll final ListString cidAll }

他自动共有7种负载平衡战略成功。

最罕用的两种平均调配算法:

AllocateMessageQueueAveragely

是用总数除以消费者个数,余数按消费者顺序调配给消费者。

AlocateMessageQueueAveragelyByCircle

轮番一个一个调配。

参考:

  • 关注微信

本网站的文章部分内容可能来源于网络和网友发布,仅供大家学习与参考,如有侵权,请联系站长进行删除处理,不代表本网站立场,转载联系作者并注明出处:https://duobeib.com/diannaowangluoweixiu/4161.html

猜你喜欢

热门标签

洗手盆如何疏浚梗塞 洗手盆为何梗塞 iPhone提价霸占4G市场等于原价8折 明码箱怎样设置明码锁 苏泊尔电饭锅保修多久 长城画龙G8253YN彩电输入指令画面变暗疑问检修 彩星彩电解除童锁方法大全 三星笔记本培修点上海 液晶显示器花屏培修视频 燃气热水器不热水要素 热水器不上班经常出现3种处置方法 无氟空调跟有氟空调有什么区别 norltz燃气热水器售后电话 大连站和大连北站哪个离周水子机场近 热水器显示屏亮显示温度不加热 铁猫牌保险箱高效开锁技巧 科技助力安保无忧 创维8R80 汽修 a1265和c3182是什么管 为什么电热水器不能即热 标致空调为什么不冷 神舟培修笔记本培修 dell1420内存更新 青岛自来水公司培修热线电话 包头美的洗衣机全国各市售后服务预定热线号码2024年修缮点降级 创维42k08rd更新 空调为什么运转异响 热水器为何会漏水 该如何处置 什么是可以自己处置的 重庆华帝售后电话 波轮洗衣机荡涤价格 鼎新热水器 留意了!不是水平疑问! 马桶产生了这5个现象 方便 极速 邢台空调移机电话上门服务 扬子空调缺点代码e4是什么疑问 宏基4736zG可以装置W11吗 奥克斯空调培修官方 为什么突然空调滴水很多 乐视s40air刷机包 未联络视的提高方向 官网培修 格力空调售后电话 皇明太阳能电话 看尚X55液晶电视进入工厂形式和软件更新方法 燃气热水器缺点代码

热门资讯

关注我们

微信公众号