 Apache RocketMQ 从入门到实战2. 消费队列负载算法与重平衡机制 那集群模式下,消费者是如何来分配消息的呢? 例如上面实例中 order_topic 有 16 个队列,那一个拥有 3 个消费者的消费组如何来分 配队列中。 本文来自『中间件兴趣圈』公众号,仅作技术交流,未授权任何商业行为。 13 > 1.1 RocketMQ 核心概念扫盲篇 在 MQ 领域有一个不成文的约定:同一个消费者同一时间可以分配多个队列,但一个 队列同一时间只会分配给一个消费者。 RocketMQ 提供了众多的队列负载算法,其中最常用的两种平均分配算法。  AllocateMessageQueueAveragely  平均分配  AllocateMessageQueueAveragelyByCircle  轮流平均分配 为了说明这两种分配算法的分配规则,现在对 16 个队列,进行编号,用 q0~q15 表示, 消费者用 y 分配算法的队列负载机制如下: c0:q0 q1 q2 q3 q4 q5 c1: q6 q7 q8 q9 q10 c2: q11 q12 q13 q14 q15 其算法的特点是用总数除以消费者个数,余数按消费者顺序分配给消费者,故 c0 会多 分配一个队列,而且队列分配是连续的。 AllocateMessageQueueAveragelyByCircle 分配算法的队列负载机制如下:0 码力 | 165 页 | 12.53 MB | 1 年前3 Apache RocketMQ 从入门到实战2. 消费队列负载算法与重平衡机制 那集群模式下,消费者是如何来分配消息的呢? 例如上面实例中 order_topic 有 16 个队列,那一个拥有 3 个消费者的消费组如何来分 配队列中。 本文来自『中间件兴趣圈』公众号,仅作技术交流,未授权任何商业行为。 13 > 1.1 RocketMQ 核心概念扫盲篇 在 MQ 领域有一个不成文的约定:同一个消费者同一时间可以分配多个队列,但一个 队列同一时间只会分配给一个消费者。 RocketMQ 提供了众多的队列负载算法,其中最常用的两种平均分配算法。  AllocateMessageQueueAveragely  平均分配  AllocateMessageQueueAveragelyByCircle  轮流平均分配 为了说明这两种分配算法的分配规则,现在对 16 个队列,进行编号,用 q0~q15 表示, 消费者用 y 分配算法的队列负载机制如下: c0:q0 q1 q2 q3 q4 q5 c1: q6 q7 q8 q9 q10 c2: q11 q12 q13 q14 q15 其算法的特点是用总数除以消费者个数,余数按消费者顺序分配给消费者,故 c0 会多 分配一个队列,而且队列分配是连续的。 AllocateMessageQueueAveragelyByCircle 分配算法的队列负载机制如下:0 码力 | 165 页 | 12.53 MB | 1 年前3
 消息中间件RocketMQ原理解析 - 斩秋topic 下的所有队列的方式来实现发送方的负载均衡 1) Topic 下的所有队列如何理解: 比如 broker1, broker2, borker3 三台 broker 机器都配置了 Topic_A Broker1 的队列为 queue0 , queue1 Broker2 的队列为 queue0, queue2, queue3, Broker3 的队列为 queue0 当然一般情况下的 broker 启动的时候注册到 namesrv 的 Topic_A 队列为共 6 个分别为: broker1_queue0, broker1_queue1, broker2_queue0, broker2_queue1, broker2_queue2, broker3_queue0, 2) Producer 如何实现轮询队列: Producer 从 namesrv 获取的到 Topic_A messageQueueList //Topic_A 的所有的队列 --AtomicInteger sendWhichQueue //自增整型 方法 selectOneMessageQueue 方法用来选择一个发送队列 (++sendWitchQueue) % messageQueueList.size 为队列集合的下标 每次获取 queue 都会通过0 码力 | 57 页 | 2.39 MB | 1 年前3 消息中间件RocketMQ原理解析 - 斩秋topic 下的所有队列的方式来实现发送方的负载均衡 1) Topic 下的所有队列如何理解: 比如 broker1, broker2, borker3 三台 broker 机器都配置了 Topic_A Broker1 的队列为 queue0 , queue1 Broker2 的队列为 queue0, queue2, queue3, Broker3 的队列为 queue0 当然一般情况下的 broker 启动的时候注册到 namesrv 的 Topic_A 队列为共 6 个分别为: broker1_queue0, broker1_queue1, broker2_queue0, broker2_queue1, broker2_queue2, broker3_queue0, 2) Producer 如何实现轮询队列: Producer 从 namesrv 获取的到 Topic_A messageQueueList //Topic_A 的所有的队列 --AtomicInteger sendWhichQueue //自增整型 方法 selectOneMessageQueue 方法用来选择一个发送队列 (++sendWitchQueue) % messageQueueList.size 为队列集合的下标 每次获取 queue 都会通过0 码力 | 57 页 | 2.39 MB | 1 年前3
 RocketMQ v3.2.4 开发指南........................................................................... 16 7.1 单机支持 1 万以上持丽化队列 .................................................................................................. ...................................................................................... 24 7.10 单队列幵行消费 .............................................................................................. 中,主要挃的是尿部顺序,即一类消息为满足顺 序性,必须 Producer 单线程顺序収送,丏収送到同一个队列,返样 Consumer 就可以挄照 Producer 収送 的顺序去消费消息。  普通顺序消息 顺序消息的一种,正常情冴下可以保证完全的顺序消息,但是一旦収生通信异常,Broker 重启,由亍队列 总数収生发化,哈希叏模后定位的队列会发化,产生短暂的消息顺序丌一致。 如果业务能容忍在集群异常情冴(如某个0 码力 | 52 页 | 1.61 MB | 1 年前3 RocketMQ v3.2.4 开发指南........................................................................... 16 7.1 单机支持 1 万以上持丽化队列 .................................................................................................. ...................................................................................... 24 7.10 单队列幵行消费 .............................................................................................. 中,主要挃的是尿部顺序,即一类消息为满足顺 序性,必须 Producer 单线程顺序収送,丏収送到同一个队列,返样 Consumer 就可以挄照 Producer 収送 的顺序去消费消息。  普通顺序消息 顺序消息的一种,正常情冴下可以保证完全的顺序消息,但是一旦収生通信异常,Broker 重启,由亍队列 总数収生发化,哈希叏模后定位的队列会发化,产生短暂的消息顺序丌一致。 如果业务能容忍在集群异常情冴(如某个0 码力 | 52 页 | 1.61 MB | 1 年前3
 rocketmq 服务部署nameServer地址,如果name server是多台集群的话,就用分号分隔 namesrvAddr=192.168.166.20:9876;192.168.166.206:9876 # 每个topic对应队列的数量,默认为4,实际参考consumer实例的数量,值过小不利于consumer负 均衡 defaultTopicQueueNums=8 # 是否允许broker自动创建Topic,生产建议关闭 # commitLog 存储路径 storePathCommitLog=/Users/gitsilence/JavaTools/rocketmq/data/store-a/commitlog # 消费队列存储路径 storePathConsumerQueue=/Users/gitsilence/JavaTools/rocketmq/data/store-a/consumeque e # 消息索引存储路径 nameServer地址,如果name server是多台集群的话,就用分号分隔 namesrvAddr=192.168.166.20:9876;192.168.166.206:9876 # 每个topic对应队列的数量,默认为4,实际参考consumer实例的数量,值过小不利于consumer负 均衡 defaultTopicQueueNums=8 # 是否允许broker自动创建Topic,生产建议关闭0 码力 | 11 页 | 284.35 KB | 1 年前3 rocketmq 服务部署nameServer地址,如果name server是多台集群的话,就用分号分隔 namesrvAddr=192.168.166.20:9876;192.168.166.206:9876 # 每个topic对应队列的数量,默认为4,实际参考consumer实例的数量,值过小不利于consumer负 均衡 defaultTopicQueueNums=8 # 是否允许broker自动创建Topic,生产建议关闭 # commitLog 存储路径 storePathCommitLog=/Users/gitsilence/JavaTools/rocketmq/data/store-a/commitlog # 消费队列存储路径 storePathConsumerQueue=/Users/gitsilence/JavaTools/rocketmq/data/store-a/consumeque e # 消息索引存储路径 nameServer地址,如果name server是多台集群的话,就用分号分隔 namesrvAddr=192.168.166.20:9876;192.168.166.206:9876 # 每个topic对应队列的数量,默认为4,实际参考consumer实例的数量,值过小不利于consumer负 均衡 defaultTopicQueueNums=8 # 是否允许broker自动创建Topic,生产建议关闭0 码力 | 11 页 | 284.35 KB | 1 年前3
 基于Apache APISIX 与RocketMQ 构建云原生一体化架构主从复制架构升级,性能提升数倍 RAFT 存储生产可用 rocketm q-con n ect 进入孵化 2021 5.0 -p rev iew 发布 性能优化、PoP 消费,多存储目录, 轻量级队列 rocketm q-strea m s 轻量级实时计算 引擎发布 5.0 消息事件流融合处理平台 Sta r: 1 .7w C on tributor: 50 0 + RocketMQ 在主节点宕机时,备节点要有自动切换为主的能力 • 容量调整时,不能产生数据迁移,且要在秒级完成 固定分区使用场景 • 任务计算过程中,会将同一个业务类型的数据发到同一个队列 • Binlog 等数据同步过程中,需要保证严格顺序 RAFT 存储支持:自动主从切换,强一致性保证 逻辑队列:秒级无损弹性扩缩,无数据复制,流量精准调度 消息与流融合索引支持 核心问题 • 消息体小且存储结构面向单 条消息,导致提升吞吐困难0 码力 | 22 页 | 2.26 MB | 1 年前3 基于Apache APISIX 与RocketMQ 构建云原生一体化架构主从复制架构升级,性能提升数倍 RAFT 存储生产可用 rocketm q-con n ect 进入孵化 2021 5.0 -p rev iew 发布 性能优化、PoP 消费,多存储目录, 轻量级队列 rocketm q-strea m s 轻量级实时计算 引擎发布 5.0 消息事件流融合处理平台 Sta r: 1 .7w C on tributor: 50 0 + RocketMQ 在主节点宕机时,备节点要有自动切换为主的能力 • 容量调整时,不能产生数据迁移,且要在秒级完成 固定分区使用场景 • 任务计算过程中,会将同一个业务类型的数据发到同一个队列 • Binlog 等数据同步过程中,需要保证严格顺序 RAFT 存储支持:自动主从切换,强一致性保证 逻辑队列:秒级无损弹性扩缩,无数据复制,流量精准调度 消息与流融合索引支持 核心问题 • 消息体小且存储结构面向单 条消息,导致提升吞吐困难0 码力 | 22 页 | 2.26 MB | 1 年前3
 Apache RocketMQ 介绍NameServer以轻量级的方式提供服务发现和路由功能,每个NameServer存有全量的路由信息,提 对等的读写服务,支持快速扩缩容。 Broker负责消息存储,以Topic为纬度支持轻量级的队列,单机可以支撑上万队列规模,支持消息推 模型,具备多副本容错机制(2副本或3副本)、强大的削峰填谷以及上亿级消息堆积能力,同时可严 保证消息的有序性。除此之外,Broker还提供了同城异地容灾能力,丰富的Metrics统计以及告警机 纯比较TPS的话虽然还不如Kafka的百万级别,但在支持事务的消息中间件来说已经是非常优秀了。 ● RocketMQ采用长轮询,消息投递延迟通常在几个毫秒左右。 ● RocketMQ单机最高支持5万个队列,且负载不会发生明显递增。 ● RocketMQ支持消费失败重试,这个特性非常适合运用在充值方面的应用。 ● RocketMQ支持严格的意义上的消息顺序。即时在一台Broker宕机后,消息发送会失败,但是不会0 码力 | 5 页 | 375.48 KB | 1 年前3 Apache RocketMQ 介绍NameServer以轻量级的方式提供服务发现和路由功能,每个NameServer存有全量的路由信息,提 对等的读写服务,支持快速扩缩容。 Broker负责消息存储,以Topic为纬度支持轻量级的队列,单机可以支撑上万队列规模,支持消息推 模型,具备多副本容错机制(2副本或3副本)、强大的削峰填谷以及上亿级消息堆积能力,同时可严 保证消息的有序性。除此之外,Broker还提供了同城异地容灾能力,丰富的Metrics统计以及告警机 纯比较TPS的话虽然还不如Kafka的百万级别,但在支持事务的消息中间件来说已经是非常优秀了。 ● RocketMQ采用长轮询,消息投递延迟通常在几个毫秒左右。 ● RocketMQ单机最高支持5万个队列,且负载不会发生明显递增。 ● RocketMQ支持消费失败重试,这个特性非常适合运用在充值方面的应用。 ● RocketMQ支持严格的意义上的消息顺序。即时在一台Broker宕机后,消息发送会失败,但是不会0 码力 | 5 页 | 375.48 KB | 1 年前3
共 6 条
- 1













