RocketMQ原理解析-consumer 2.消费端负载均衡
来源:互联网 发布:java中文分词器 编辑:程序博客网 时间:2024/06/08 02:49
http://blog.csdn.net/quhongwei_zhanqiu/article/details/39142693
消费端负载均衡
消费端会通过RebalanceService线程,10秒钟做一次基于topic下的所有队列负载
消费端遍历自己的所有topic,依次调rebalanceByTopic
根据topic获取此topic下的所有queue
选择一台broker获取基于group的所有消费端(有心跳向所有broker注册客户端信息)
选择队列分配策略实例AllocateMessageQueueStrategy执行分配算法,获取队列集合Set<MessageQueue>mqSet
1) 平均分配算法,其实是类似于分页的算法
将所有queue排好序类似于记录
将所有消费端consumer排好序,相当于页数
然后获取当前consumer所在页面应该分配到的queue
2) 按照配置来分配队列, 也就是说在consumer启动的时候指定了queue
3) 按照机房来配置队列
Consumer启动的时候会指定在哪些机房的消息
获取指定机房的queue
然后在执行如1)平均算法
根据分配队列的结果更新ProccessQueueTable<MessageQueue,ProcessQueue>
1) 比对mqSet 将多余的队列删除,当broker当机或者添加,会导致分配到mqSet变化,
a) 将不在被本consumer消费的messagequeue的ProcessQueue删除,其实是设置ProcessQueue的droped属性为true
b) 将超过两份中没有拉取动作ProcessQueue删除
//TODO 为什么要删除掉,两分钟后来了消息怎么办?
//
2) 添加新增队列,比对mqSet,给新增的messagequeue
构建长轮询对象PullRequest对象,会从broker获取消费的进度
构建这个队列的ProcessQueue
将PullRequest对象派发到长轮询拉消息服务(单线程异步拉取)
注:ProcessQueue正在被消费的队列,
(1) 长轮询拉取到消息都会先存储到ProcessQueue的TreeMap<Long, MessageExt>集合中,消费调后会删除掉,用来控制consumer消息堆积,
TreeMap<Long, MessageExt> key是消息在此ConsumeQueue队列中索引
(2) 对于顺序消息消费处理
locked属性:当consumer端向broker申请锁队列成功后设置true,只有被锁定的processqueue才能被执行消费
rollback: 将消费在msgTreeMapTemp中的消息,放回msgTreeMap重新消费
commit: 将临时表msgTreeMapTemp数据清空,代表消费完成,放回最大偏移值
(3) 这里是个TreeMap,对key即消息的offset进行排序,这个样可以使得消息进行顺序消费
- RocketMQ原理解析-consumer 2.消费端负载均衡
- RocketMQ原理解析-consumer 2.消费端负载均衡
- RocketMQ原理解析-consumer 2.消费端负载均衡
- RocketMQ原理解析-consumer 5.push消费-顺序消费消息
- RocketMQ原理解析-consumer 5.push消费-顺序消费消息
- RocketMQ原理解析-consumer 5.push消费-顺序消费消息
- RocketMQ原理解析-consumer 6.pull消息消费
- RocketMQ原理解析-consumer 6.pull消息消费
- RocketMQ原理解析-consumer 6.pull消息消费
- RocketMQ原理解析-consumer 4.长轮询push消息—并发消费消息
- RocketMQ原理解析-consumer 4.长轮询push消息—并发消费消息
- RocketMQ原理解析-consumer 4.长轮询push消息—并发消费消息
- RocketMQ原理解析-consumer 1.启动
- RocketMQ原理解析-consumer 3.长轮询
- RocketMQ原理解析-consumer 7.shutdown
- RocketMQ原理解析-consumer 1.启动
- RocketMQ原理解析-consumer 3.长轮询
- RocketMQ原理解析-consumer 7.shutdown
- 15 个有趣的 JS 和 CSS 库
- opencv在vs上的环境配置
- 每天一个linux命令(19):find 命令概览
- LEADTOOLS中如何使用文档清理命令接口来清理文档图像
- iOS的iPhone屏幕尺寸、分辨率、PPI和使用123倍图
- RocketMQ原理解析-consumer 2.消费端负载均衡
- Oracle以DBA登陆
- 触发器和存储过程
- linux 离线安装软件
- 网络编程udp
- 学习日志2017.12.19
- C++之运算符重载
- Advanced Installer打包及自定义卸载
- IOS_音视频不同步问题