如何实现Rocketmq集群消费测试

76次阅读
没有评论

共计 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 的发送记录:

如何实现 Rocketmq 集群消费测试

 consumer1 的消费记录:

如何实现 Rocketmq 集群消费测试

 consumer2 的消费记录:

如何实现 Rocketmq 集群消费测试

 consumer3 的消费记录:

如何实现 Rocketmq 集群消费测试

 consumer4 的消费记录:

如何实现 Rocketmq 集群消费测试

 consumer5 的消费记录:

如何实现 Rocketmq 集群消费测试

 consumer6 的消费记录:

如何实现 Rocketmq 集群消费测试

 consumer7 的消费记录:

如何实现 Rocketmq 集群消费测试

 consumer8 的消费记录:

如何实现 Rocketmq 集群消费测试

第三组,总发送条数 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 的发送记录:

如何实现 Rocketmq 集群消费测试

 consumer1 的消费记录:

如何实现 Rocketmq 集群消费测试

 consumer2 的消费记录:

如何实现 Rocketmq 集群消费测试

 consumer3 的消费记录:

如何实现 Rocketmq 集群消费测试

 consumer4 的消费记录:

如何实现 Rocketmq 集群消费测试

第四组,总发送条数 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 的发送记录:

如何实现 Rocketmq 集群消费测试

 consumer1 的消费记录:

如何实现 Rocketmq 集群消费测试

 consumer2 的消费记录:

如何实现 Rocketmq 集群消费测试

 consumer3 的消费记录:

如何实现 Rocketmq 集群消费测试

 consumer4 的消费记录:

如何实现 Rocketmq 集群消费测试

 consumer5 的消费记录:

如何实现 Rocketmq 集群消费测试

 consumer6 的消费记录:

如何实现 Rocketmq 集群消费测试

 consumer7 的消费记录:

如何实现 Rocketmq 集群消费测试

 consumer8 的消费记录:

如何实现 Rocketmq 集群消费测试

第五组,总发送条数 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 的发送记录:

如何实现 Rocketmq 集群消费测试

 consumer1 的消费记录:

如何实现 Rocketmq 集群消费测试

 consumer2 的消费记录:

如何实现 Rocketmq 集群消费测试

 consumer3 的消费记录:

如何实现 Rocketmq 集群消费测试

 consumer4 的消费记录:

如何实现 Rocketmq 集群消费测试

 consumer5 的消费记录:

如何实现 Rocketmq 集群消费测试

 consumer6 的消费记录:

如何实现 Rocketmq 集群消费测试

 consumer7 的消费记录:

如何实现 Rocketmq 集群消费测试

二   评测结果

 1、rocketmq 集群消费模式,订阅消息的确达到了队列负载均衡,与这种负载均衡消费相关的因素有: master 机器个数、  特定 topic 的 queue 个数,这两个数值相乘,才是 rocketmq 最终计算队列的总数。

 2、rocketmq 的集群消费能力,保证消息准确性,完整性,所有被消费的消息总数与 producer 端发送的消息总数是一致的,不存在消息丢弃的情况。

 3、分析 consumer 消费日志,说明每条消息在相同 consumerGroup 组的不同 consumer 端中仅仅只会被消费一次。

 4、在集群消费模式下,如果 consumer 的总数,超过了队列总数,那么多余的 consumer 端将不能消费消息。

以上是“如何实现 Rocketmq 集群消费测试”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注丸趣 TV 行业资讯频道!

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-08-16发表,共计3811字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)