2019独角兽企业重金招聘Python工程师标准>>>
一 机器部署
1、机器组成
7台机器,均为16G内存
每台服务器均有4个CPU,2核
2、运行环境配置
3、刷盘方式
每台机器master机器均采用异步刷盘方式
二 、同组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个
启动producer端,发送20条消息,记录如下:
6个consumer端的消费记录如下:
第1个consumer:
第2个consumer:
第3个consumer:
第4个consumer:
第5个consumer:
第6个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个
启动producer端,发送20条消息,记录如下:
6个consumer端的消费记录如下:
第1个consumer:
第2个consumer:
第3个consumer:
第4个consumer:
第5个consumer:
第6个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个
启动producer端,发送20条消息,记录如下:
6个consumer端的消费记录如下:
第1个consumer:
第2个consumer:
第3个consumer:
第4个consumer:
第5个consumer:
第6个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实例。
producer向指定topic发送消息,消息记录如下
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