Rocketmq集群consumer消费(同组及不同组)

一 机器部署

1、机器组成

7台机器,均为16G内存

每台服务器均有4个CPU,2核

Rocketmq集群consumer消费(同组及不同组)

 

2、运行环境配置

Rocketmq集群consumer消费(同组及不同组)

3、刷盘方式

每台机器master机器均采用异步刷盘方式

Rocketmq集群consumer消费(同组及不同组)

 

Rocketmq集群consumer消费(同组及不同组)

 

 

 

二 、同组consumer均衡消费queue

1、评测目的

   测试同一个consumerGroup组的所有consumer均衡消费同一个topic的所有queue。

  

2、评测指标

    master机器个数

    topic的队列数

    consumerGroup组的consumer个数

   

3、评测逻辑

  总队列数值 = master机器个数 * 指定topic的queue个数

    如果某个topic有4个队列, 存在6个consumer,在有两台master机器场景下,那么第一个、第二个Consumer消费2个队列,其余consumer消费1个队列。

  如果Consumer 超过队列数量,那么多余的Consumer将不能消费消息。

 

4、评测步骤

    (1)通过rocketmq管理控制台创建topic,并指定默认的队列个数。

    (2)配置一组具有相同consumerGroup名称的consumer,并启动consumer端。

    (3)配置producer端,并向指定的topic发送消息。

    (4)记录consumer端的消费记录,分析每个consumer消费的queueId和broker机器所在的IP

    (5)更新topic的queue个数,重复步骤2、3、4。

   

5、评测过程

    (1)第一组

    创建topic,更新默认的队列个数为4个

Rocketmq集群consumer消费(同组及不同组)

   

    启动producer端,发送20条消息,记录如下:

   

Rocketmq集群consumer消费(同组及不同组)

   

   

    6个consumer端的消费记录如下:

    第1个consumer:

Rocketmq集群consumer消费(同组及不同组)

 

    第2个consumer:

Rocketmq集群consumer消费(同组及不同组)

 

    第3个consumer:

Rocketmq集群consumer消费(同组及不同组)

 

    第4个consumer:

Rocketmq集群consumer消费(同组及不同组)

 

    第5个consumer:

Rocketmq集群consumer消费(同组及不同组)

 

    第6个consumer:

Rocketmq集群consumer消费(同组及不同组)

   

    分析得出结论:

总队列数量 Consumer数量 Reblance结果
(期望)
Reblance结果
(实际)
Master机器 消费条数
Master1 Master2
4 6 C1:2 C1:2 2 0 6
C2:2 C2:2 2 0 6
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

 

 

 

(2)第二组

    创建topic,更新默认的队列个数为3个

Rocketmq集群consumer消费(同组及不同组)

   

    启动producer端,发送20条消息,记录如下:

Rocketmq集群consumer消费(同组及不同组)

   

   

    6个consumer端的消费记录如下:

    第1个consumer:

Rocketmq集群consumer消费(同组及不同组)

 

    第2个consumer:

Rocketmq集群consumer消费(同组及不同组)

 

    第3个consumer:

Rocketmq集群consumer消费(同组及不同组)

 

    第4个consumer:

Rocketmq集群consumer消费(同组及不同组)

 

    第5个consumer:

Rocketmq集群consumer消费(同组及不同组)

    第6个consumer:

Rocketmq集群consumer消费(同组及不同组)

   

    分析得出结论:

总队列数量 Consumer数量 Reblance结果
(期望)
Reblance结果
(实际)
Master机器 消费条数
Master1 Master2
3 6 C1:1 C1:1 1 0 4
C2:1 C2:1 1 0 3
C3:1 C3:1 0 1 3
C4:1 C4:1 0 1 3
C5:1 C5:1 0 1 3
C6:1 C6:1 1 0 4

 

 

(2)第三组

    创建topic,更新默认的队列个数为2个

Rocketmq集群consumer消费(同组及不同组)

   

    启动producer端,发送20条消息,记录如下:

Rocketmq集群consumer消费(同组及不同组)

   

   

    6个consumer端的消费记录如下:

    第1个consumer:

Rocketmq集群consumer消费(同组及不同组)

 

    第2个consumer:

Rocketmq集群consumer消费(同组及不同组)

 

    第3个consumer:

Rocketmq集群consumer消费(同组及不同组)

 

    第4个consumer:

Rocketmq集群consumer消费(同组及不同组)

 

    第5个consumer:

Rocketmq集群consumer消费(同组及不同组)

   

    第6个consumer:

Rocketmq集群consumer消费(同组及不同组)

   

    分析得出结论:

总队列数量 Consumer数量 Reblance结果
(期望)
Reblance结果
(实际)
Master机器 消费条数
Master1 Master2
2 6 C1:1 C1:1 1 0 5
C2:1 C2:1 0 0 0
C3:1 C3:1 0 1 5
C4:1 C4:1 0 1 5
C5:1 C5:1 1 0 5
C6:1 C6:1 0 0 0

 

三个组的测试结果,的确达到了queue均匀消费。分析队列数量、Consumer数量、Replance结果如下表

总队列数量 Consumer数量 Reblance结果
4 6 C1 - C2:2
C3 - C6:1
3 6 C1 - C6:1
2 6 C1 - C4:1
C5 - C6:0

 

 

 

三、不同组consumer消费相同topic

1、评测目的

   测试多个不相同的consumerGroup组的所有consumer消费同一个topic的消息。

  

2、评测指标

    consumerGroup组的名称以及instanceName实例

    topic消息的个数、顺序、queueId、msgId

   

3、评测逻辑

  位于不同consumerGroup组的 consumer端,可以同时消费相同topic的消息,所以只需要记录不同组的consumerGroup消费消息msgId的顺序即可。

  

4、评测步骤

    (1)创建两个不同consumerGroup组的consumer端。

    (2)配置producer端,并向指定的topic发送消息,记录消息的msgId、body等信息

    (3)对比分析消费记录。

   

5、评测过程

    创建不同comsumerGroup组,启动各自的consumer实例。

   

Rocketmq集群consumer消费(同组及不同组)

   

   

Rocketmq集群consumer消费(同组及不同组)

   

    producer向指定topic发送消息,消息记录如下

   

Rocketmq集群consumer消费(同组及不同组)

   

    consumer端消费记录如下

   

Rocketmq集群consumer消费(同组及不同组)

 

Rocketmq集群consumer消费(同组及不同组)

   

分析消费记录可知

    两组consumerGroup的consumer实例均消费了同一个topic的所有消息,包括消息的顺序、msgId、queueId等等都是完全一致的,测试结果与期望相符合。

 

 

四、评测结果

   

1、位于相同consumerGroup组的consumer端,在消费同一个topic的队列的数据,可以均衡消费queue。

注:queue的总数 = master机器台数 * topic的队列数

   

2、不同组的consumerGroup的consumer端,可以消费相同的topic消息,且消费消息的顺序、msgId、offset、body等参数完全一致。

   

3、剩余的功能点,本周暂未测试,留待后续深入研究。

    (1)支持动态切换topic、minOffset

    (2)当一个group下的consumer在消费过程中断服务,切换另外的group下的consumer开始消费,观察是否隔离

    (3)消息从哪里开始消费、消息回溯

    (4)重试队列、死信队列

 

4、已测试功能点

    (1)集群消费动态加入、删除、负载

    (2)广播消费

    (3)延迟消费(2分钟、1分钟、10秒)

    (4)Producer设置topic的queue数目

    (5)pull中拉取消息分页数目

    (6)一个consumer可订阅多个topic,可选择性的订阅topic的tag

    (7)当前消费数,最大消费数

    (8)消息堆积数量处理

    (9)一个group下平分一个topic的quene

    (10)不同组的group同时消费一个topic