rocketMq - rebalance介绍

系列

rocketMq概念介绍

rocketMq-namesrv介绍

rocketMq-Topic创建过程

rocketMq-producer介绍

rocketMq-consumer介绍

rocketMq - rebalance介绍

rocketMq - 并发消费过程

rocketMq - 串行消费过程

rocketMq-broker介绍

rocketMq-broker消息存储介绍

rocketMq - commitLog

rocketMq - index介绍

rocketMq-延迟消息介绍

rocketMq-事务消息介绍

rocketMq消息查询

rocketMq和kafka的架构区别

rocketMq - master/slave同步


本章主要讲解Rebalance在consumer端的作用,如果要理解consumer的逻辑,就必须要知道在consumer端有Rebalance这个服务,没有Rebalance也就没有consumer的消息拉取。

Rebalance过程介绍

    1、从namesrv获取messageQueue信息

    2、从broker获取consumer信息

    3、选择Rebalance策略

    4、三者结合实现Rebalance操作


Rebalance的平衡粒度

Rebalance是针对Topic+ConsumerGroup进行Rebalance的,在我们创建的comsumer过程中会订阅topic(包括%retry%consumerGroup),Rebalance就是要这些Topic下的所有messageQueue按照一定的规则分发给consumerGroup下的consumer进行消费。

rocketMq - rebalance介绍_第1张图片
Rebalance平衡粒度

说明:参见RebalanceImpl类

    1、着重需要强调的概念,Rebalance是针对订阅的topic进行Rebalance,也就是假如consumer订阅了10个Topic,那么我们就需要对10个Topic里的每一个Topic进行Rebalance。


Rebalance的平衡过程

rocketMq - rebalance介绍_第2张图片
Rebalance平衡过程

说明:参见RebalanceImpl类

    1、Rebalance的过程需要3个要素,分别是Topic下的所有MessageQueue、consumerGroup下的所有consumer、Rebalance策略。这里的MessageQueue是指Topic在每个broker上的队列配置信息。

    2、获取MessageQueue信息,获取consumerGroup下的consumer信息,根据Rebalance策略进行Rebalance。

    3、更新Rebalance的结果进行消息的拉取。

    4、Rebalance更新consumer负责的messageQueue


rocketMq - rebalance介绍_第3张图片
consumer更新负责的MessageQueue

说明:参见RebalanceImpl类


Rebalance策略

rocketMq - rebalance介绍_第4张图片
Rebalance可选策略

说明:参见RebalanceImpl类



rocketMq - rebalance介绍_第5张图片
Rebalance策略之一

说明:参见AllocateMessageQueueAveragely类

    1、举其中一种策略说明,这个策略是考虑当前consumerId的位置,consumer的数量,MessageQueue的数量,根据consumerId所处的位置决定分配多少消费队列。

    2、该过程会动态调整,也可能会不一致,因为依赖的数据来自broker会有不一致,但是最终肯定会一致,周期性的Rebalance的作用。


MessageQueue获取过程

rocketMq - rebalance介绍_第6张图片
MessageQueue的获取过程

说明:参见MQClientInstance类

    1、consumer端的MessageQueue是根据topic中的readQueueNums来计算的

    2、计算MessageQueue的TopicRouteData是从namesrv中获取的


Consumer获取过程

rocketMq - rebalance介绍_第7张图片
consumer获取过程

说明:参见MQClientInstance类


rocketMq - rebalance介绍_第8张图片
consumer随机选择broker发起请求

参见:MQClientAPIImpl类


rocketMq - rebalance介绍_第9张图片
broker返回consumerIds列表

说明:参见ConsumerManageProcessor类

    1、获取consumer列表跟注册过程是对称的


Consumer注册过程

要知道consumer的获取必须知道consumer是怎么注册的,其实consumer会把注册信息发送给broker保存,当然由于没有强一致性的保证,会存在某些极端情况下broker上的配置不一致,但是由于这是一个周期性的任务,所以最终肯定会达到一致的。


rocketMq - rebalance介绍_第10张图片
consumer启动时候发送心跳信息

说明:参见DefaultMQPushConsumerImpl类


rocketMq - rebalance介绍_第11张图片
向所有broker发送心跳信息注册consumer

说明:参见MQClientInstance类

    1、心跳信息包含client的注册信息

    2、同步给broker的信息是最终一致性的,非强一致性


rocketMq - rebalance介绍_第12张图片
consumer的注册过程

说明:参见ClientManageProcessor

    1、处理consumer心跳信息的入口


rocketMq - rebalance介绍_第13张图片
更新consumer在broker的信息

说明:参见ConsumerManager类

    1、broker保存consumer元信息

你可能感兴趣的:(rocketMq - rebalance介绍)