rocketmq-push模式-消费侧重平衡-类流程图分析

1、观察consumer线程

使用arthas分析
把无关线程排除掉

  • MQClientFactoryScheduledThread 定时任务线程
    定时任务线程,包含如下任务:
    每2分钟更新nameServer列表
    每30秒更新topic的路由信息
    每30秒检查broker的存活,发送心跳请求
    每5秒持久化消费队列的offset。如果是广播模式,持久化在本地;如果是集群模式,反馈给broker
    每分钟调整线程池大小(实际上并没有作用。因为最终执行是空方法)

  • PullMessageService 从broker拉取msg的线程。

  • RebalanceService 重平衡线程。每20秒执行一次
    具体可查看org.apache.rocketmq.client.impl.factory.MQClientInstance#start()

2、重平衡,任务是如何创建的

重平衡,就是在消费者组动态伸缩的时候,自动把队列重新分配。具体工作的线程,就是RebalanceService。如下是整个重平衡的类图流程
在这里插入图片描述
如图,启动时,会触发重平衡任务org.apache.rocketmq.client.impl.consumer.RebalanceService#run()
重平衡的关键点在于如何动态伸缩,重点内容在org.apache.rocketmq.client.impl.consumer.RebalanceImpl#doRebalance

  • 第一步,获取topic对应的队列集合Set<> mqSet
  • 第二步,随机从一个可选broker上,获取所有消费者的集合List cidAll。cid就是消费端的唯一标识。格式如下:“ip@pid#时间戳”,比如127.01.01.01@1723#2926328724786400
  • 第三步,按字段排序mqSet和cidAll。Collections.sort()
if (mqSet != null && cidAll != null) {
   
	List<MessageQueue> mqAll = new ArrayList
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值