RocketMQ Consumer重平衡流程
2022-11-12 13:07:24 4 举报
RocketMQ Consumer重平衡流程
作者其他创作
大纲/内容
run()
从随机的一个broker中获取该消费组中所有的消费者客户端IDcidAll
如果新队列中不包含原先的队列,则停止原先队列消息消费并移除
空,则阻塞等待
PullMessageService(拉取线程)
RebalanceService(重平衡线程)
MQClientInstance
DefaultMQPushConsumerImpl
RebalanceImpl
遍历每个消费组的消费者实例,分别执行重平衡
每隔20s执行一次重平衡
消息拉取成功后重新将PullRequest加入到pullRequestQueue,继续该队列的下一次消息拉取
遍历订阅的每个topic,对每个topic中的队列都重新负载均衡
根据负载均衡策略重平衡,获得该消费者新的队列集合
pullRequestQueue是否为空
对队列信息和消费者客户端id排序
doRebalance()
拉取消息
如果原先队列中不包含新分配的队列,则创建新的PullRequest放到拉取任务队列中
获取该topic对应的队列信息mqSet
分为广播模式和集群模式,这里只关注集群模式
唤醒
调用重平衡组件,真正开始执行重平衡逻辑
对比原先的队列和当前新分配的队列
pullRequestQueue.take()
0 条评论
下一页