您的位置:首页 > 其它

Rocketmq集群消费测试

2016-06-30 00:00 281 查看
一 机器部署

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:2
63C1:3
C2:3
1020C1-C10:1
C11-C20:0
206C1: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:4408
C2: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:2204
C2: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:4408
C2: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:1103
C2: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:1013
C2: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端将不能消费消息。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: