小编给大家分享一下如何实现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结果 |
5 | 2 | C1:3 C2:2 |
6 | 3 | C1:3 C2:3 |
10 | 20 | C1-C10:1 C11-C20:0 |
20 | 6 | C1: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机器 | 消费条数 | |
Master1 | Master2 | |||||
8 | 5 | C1:4 | C1:4 | 4 | 0 | 8 |
C2:3 | C2:3 | 1 | 2 | 3 | ||
C3:3 | C3:3 | 0 | 3 | 3 | ||
C4:3 | C4:3 | 3 | 0 | 3 | ||
C5:3 | C5:3 | 0 | 3 | 3 |
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机器 | 消费条数 | |
Master1 | Master2 | |||||
8 | 8 | C1:2 | C1:2 | 2 | 0 | 4 |
C2:2 | C2:2 | 0 | 2 | 2 | ||
C3:2 | C3:2 | 0 | 2 | 2 | ||
C4:2 | C4:2 | 0 | 2 | 2 | ||
C5:2 | C5:2 | 0 | 2 | 2 | ||
C6:2 | C6:2 | 2 | 0 | 4 | ||
C7:2 | C7:2 | 2 | 0 | 2 | ||
C8:2 | C8:2 | 2 | 0 | 2 |
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机器 | 消费条数 | |
Master1 | Master2 | |||||
8 | 4 | C1:4 | C1:4 | 4 | 0 | 8 |
C2:4 | C2:4 | 4 | 0 | 4 | ||
C3:4 | C3:4 | 0 | 4 | 4 | ||
C4:4 | C4:4 | 0 | 4 | 4 |
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机器 | 消费条数 | |
Master1 | Master2 | |||||
4 | 8 | C1:1 | C1:1 | 1 | 0 | 3 |
C2:1 | C2:1 | 1 | 0 | 3 | ||
C3:1 | C3:1 | 0 | 1 | 2 | ||
C4:1 | C4:1 | 0 | 1 | 2 | ||
C5:1 | C5:1 | 0 | 1 | 2 | ||
C6:1 | C6:1 | 0 | 1 | 2 | ||
C7:1 | C7:1 | 1 | 0 | 3 | ||
C8:1 | C8:1 | 1 | 0 | 3 |
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机器 | 消费条数 | |
Master1 | Master2 | |||||
3 | 7 | C1:1 | C1:1 | 0 | 1 | 3 |
C2:1 | C2:1 | 1 | 0 | 4 | ||
C3:1 | C3:1 | 0 | 1 | 3 | ||
C4:1 | C4:1 | 1 | 0 | 3 | ||
C5:1 | C5:1 | 1 | 0 | 4 | ||
C6:1 | C6:1 | 0 | 1 | 3 | ||
C7:0 | C7:0 | 0 | 0 | 0 |
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集群消费测试”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注亿速云行业资讯频道!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。