rocketmq的消费者源码解读二(消费负载均衡)

6)负载均衡

首先要弄清楚一个问题,啥是集群消费,这里假设单台机器对应一个jvm进程,且只包含一个clientId,其实一个jvm进程,可以包含多个clientId,多个clientId意味着多个客户端实例MQClientInstance;
多台机器都订阅了同一个主题,但该主题又分配在了不同broker的queue中,所以需要将每个主题对应的这些不同broker上的queue收集到集合set中,再将该set平均分配给不同机器;
负载均衡指将messageQueue分配给不同的clientId,通常一个clientId对应一台机器;这和生产者发消息很相似,生产者是轮询选择一个messageQueue发送;
集群中每个机器代码都一样,订阅同一个topic的所有机器(clientId不同)都是一样的业务处理逻辑,所以每个机器分别处理一部分消息,最终目的都是入库落表;

6.1)rebalanceService线程的run方法

调用countDownLatch的await方法,进行超时阻塞,时间默认20s,可配置;醒来后执行MQClientInstance#doRebalance方法,其中会遍历consumerTable,执行每个消费者组下的RebalanceImpl#doRebalance方法,其中又会遍历subscriptionInner表,对每个topic执行RebalanceImpl#rebalanceByTopic方法;

6.1.1)获取set

根据topic从topicSubscriptionInfoTable中获取set;

6.1.2)MQClientInstance#findConsumerIdList

根据topic——>topicRouteData——>List,最后随机选择一个主节点broker,向该broker发送rpc同步请求查询订阅了当前topic的所有clientId,请求码为RequestCode.GET_CONSUMER_LIST_BY_GROUP;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

orcharddd_real

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值