共计 3811 个字符,预计需要花费 10 分钟才能阅读完成。
丸趣 TV 小编给大家分享一下如何实现 Rocketmq 集群消费测试,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!
一 机器部署
1、机器组成
7 台机器,均为 16G 内存
每台服务器均有 4 个 CPU,2 核
2、运行环境配置
3、刷盘方式
每台机器 master 机器均采用异步刷盘方式
二 性能评测
1、评测目的
测试 consumer 端的集群模式消费。
2、评测指标
(1)topic 关联的 readQueueNums 读队列数值
(2)属于同一个 consumerGroup 的 consumer 个数
(3)所有 consumer 消费消息的总条数
(4)每个 consumer 消费消息,读取的队列 Id
(5)部署集群中的 master 机器台数
3、评测逻辑
如果有 5 个队列,2 个 consumer,那么第一个 Consumer 消费 3 个队列,第二 consumer 消费 2 个队列。
如果 Consumer 超过队列数量,那么多余的 Consumer 将不能消费消息。
队列数量、Consumer 数量、Replance 结果如下表
队列数量 Consumer 数量 Reblance 结果 52C1:3
C2:263C1:3
C2:31020C1-C10:1
C11-C20:0206C1:4
C2:4
C3-C4:3
4、评测过程
(1)发送消息前,查看服务端的 topic 关联的队列个数。
(2)producer 端向 topic 名称为“clusterTopicTest”队列发送消息,定为 20 条,发送消息后并记录每条消息的 msgId、queueId、offset 等基本信息。
(3)配置 consumer 端,日志记录每个 consumer 端的 instanceName、消息的 offset、所消费队列 queueId、消息的 body、消息 msgId,以及每个 consumer 消费消息的总条数。
(4)每次消费完之后,统计所有 consumer 端消费消息的总数,判断消息是否有丢失。
(5)每次消费完之后,分析每个 consumer 消费队列的 queueId,判断队列是否达到了负载均衡。
(6)记 topic 的队列数为 A,记 consumer 个数为 B,做如下调整:
第一组:保持 A 不变,增加 B,使得 A B,然后重复步骤 1 -5。
第二组:保持 A 不变,增加 B,使得 A = B,然后重复步骤 1 -5。
第三组:保持 A 不变,增加 B,使得 A = 2 * B,然后重复步骤 1 -5。
第三组:增加 A,保持 B 不变,使得 2 * A = B,然后重复步骤 1 -5。
第五组:减少 A,保持 B 不变,使得 2 * A B,然后重复步骤 1 -5。
(7)注意:需要先启动所有 consumer 端,在启动 producer 端发送消息,这样才能在每个 consumer 端同时看到消息的消费情况,因为消息被消费的速率是很快的。
(8)注意:master 机器个数,每台 master 机器上指定 topic 的队列数,两数值相乘,才是最终的 rocketmq 做负载均衡的队列个数。 (步骤 6 的 master 机器个数为 2)
第一组,总发送条数 20 条
队列数量 Consumer 数量 Reblance 结果
(期望)Reblance 结果
(实际)Master 机器消费条数
Master1Master2
85C1:4C1:4408C2:3C2:3123
C3:3C3:3033
C4:3C4:3303
C5:3C5:3033
3 个 consumer 消费消息总条数:8+3+3+3+3 = 20 条
2 台 master 机器,每个 topic 有 8 个队列, 期望的队列个数 2*8=16 个,实际的队列个数 4+3+3+3+3 = 16 个,可以看出期望、实际的 queue 分布是相同的结果。
producer 的发送记录:
consumer1 的消费记录:
consumer2 的消费记录:
consumer3 的消费记录:
consumer4 的消费记录:
consumer5 的消费记录:
第二组,总发送条数 20 条
队列数量 Consumer 数量 Reblance 结果
(期望)Reblance 结果
(实际)Master 机器消费条数
Master1Master2
88C1:2C1:2204C2:2C2:2022
C3:2C3:2022
C4:2C4:2022
C5:2C5:2022
C6:2C6:2204
C7:2C7:2202
C8:2C8:2202
8 个 consumer 消费消息总条数:8+3+3+3+3 = 20 条
2 台 master 机器,每个 topic 有 8 个队列, 期望的队列个数 2*8=16 个,实际的队列个数 2+2+2+2+2+2+2+2 = 16 个,可以看出期望、实际的 queue 分布是相同的结果。
8 个 consumer 消费消息总条数:4+2+2+2+2+2+4+2+2 = 20 条
producer 的发送记录:
consumer1 的消费记录:
consumer2 的消费记录:
consumer3 的消费记录:
consumer4 的消费记录:
consumer5 的消费记录:
consumer6 的消费记录:
consumer7 的消费记录:
consumer8 的消费记录:
第三组,总发送条数 20 条
队列数量 Consumer 数量 Reblance 结果
(期望)Reblance 结果
(实际)Master 机器消费条数
Master1Master2
84C1:4C1:4408C2:4C2:4404
C3:4C3:4044
C4:4C4:4044
8 个 consumer 消费消息总条数:8+3+3+3+3 = 20 条
2 台 master 机器,每个 topic 有 8 个队列, 期望的队列个数 2*8=16 个,实际的队列个数 4+4+4+4 = 16 个,可以看出期望、实际的 queue 分布是相同的结果。
8 个 consumer 消费消息总条数:8+4+4+4 = 20 条
producer 的发送记录:
consumer1 的消费记录:
consumer2 的消费记录:
consumer3 的消费记录:
consumer4 的消费记录:
第四组,总发送条数 20 条
队列数量 Consumer 数量 Reblance 结果
(期望)Reblance 结果
(实际)Master 机器消费条数
Master1Master2
48C1:1C1:1103C2:1C2:1103
C3:1C3:1012
C4:1C4:1012
C5:1C5:1012
C6:1C6:1012
C7:1C7:1103
C8:1C8:1103
8 个 consumer 消费消息总条数:8+3+3+3+3 = 20 条
2 台 master 机器,每个 topic 有 8 个队列, 期望的队列个数 2*4= 8 个,实际的队列个数 1+1+1+1+1+1+1+1= 8 个,可以看出期望、实际的 queue 分布是相同的结果。
8 个 consumer 消费消息总条数:3+3+2+2+2+2+3+3 = 20 条
producer 的发送记录:
consumer1 的消费记录:
consumer2 的消费记录:
consumer3 的消费记录:
consumer4 的消费记录:
consumer5 的消费记录:
consumer6 的消费记录:
consumer7 的消费记录:
consumer8 的消费记录:
第五组,总发送条数 20 条
队列数量 Consumer 数量 Reblance 结果
(期望)Reblance 结果
(实际)Master 机器消费条数
Master1Master2
37C1:1C1:1013C2:1C2:1104
C3:1C3:1013
C4:1C4:1103
C5:1C5:1104
C6:1C6:1013
C7:0C7:0000
8 个 consumer 消费消息总条数:8+3+3+3+3 = 20 条
2 台 master 机器,每个 topic 有 8 个队列, 期望的队列个数 2*3= 6 个,实际的队列个数 1+1+1+1+1+1+0 = 6 个,可以看出期望、实际的 queue 分布是相同的结果。
8 个 consumer 消费消息总条数:3+4+3+3+4+3+0 = 20 条
producer 的发送记录:
consumer1 的消费记录:
consumer2 的消费记录:
consumer3 的消费记录:
consumer4 的消费记录:
consumer5 的消费记录:
consumer6 的消费记录:
consumer7 的消费记录:
二 评测结果
1、rocketmq 集群消费模式,订阅消息的确达到了队列负载均衡,与这种负载均衡消费相关的因素有: master 机器个数、 特定 topic 的 queue 个数,这两个数值相乘,才是 rocketmq 最终计算队列的总数。
2、rocketmq 的集群消费能力,保证消息准确性,完整性,所有被消费的消息总数与 producer 端发送的消息总数是一致的,不存在消息丢弃的情况。
3、分析 consumer 消费日志,说明每条消息在相同 consumerGroup 组的不同 consumer 端中仅仅只会被消费一次。
4、在集群消费模式下,如果 consumer 的总数,超过了队列总数,那么多余的 consumer 端将不能消费消息。
以上是“如何实现 Rocketmq 集群消费测试”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注丸趣 TV 行业资讯频道!