您好,登录后才能下订单哦!
这篇文章给大家分享的是有关如何实现RocketMQ队列queue的偏移量Offset均衡分布测试的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。
一 机器部署
1、机器组成
7台机器,均为16G内存
每台服务器均有4个CPU,2核
2、运行环境配置
3、刷盘方式
每台机器master机器均采用异步刷盘方式
二 性能评测
1、评测目的
测试queue接受消息负载均衡
2、评测指标
每个queue的接受消息后,其偏移量offset大致相同
3、评测逻辑
创建topic,并配置该topic下的queue数量(3,5,8,16),发送消息后打印该条消息对应的offset,比对消息offset增加量
4、评测过程
(1)在master机器上创建名称为“topicQueueOffsetTest”
(2)控制台创建的topic配置文件保存在store目录, 查看/root/store/config/topic.json文件,即可找到该topic的原始数据
(3)client端开启5个线程,发送不同数量的消息,发送消息后记录消息在各队列queue的offset
queue配置的是默认值8, 发送的消息条数 5*50=250条消息
queue配置的是默认值8, 发送的消息条数 5*400=2000条消息
客户端设置queue队列数为12,再次发送的消息条数 5*400=2000条消息,并记录消息的offset,关键代码如下
此处日志显示的 queueNum=12,是指的client端的producer获取的queue个数,但此时后续的日志显示,server端的queueID依然是0-7,总共8个,两种queue的个数并不相等。
说明在producer发送消息时,对于此前已运行的borker服务器,修改配置文件的defaultTopicQueueNums属性的值不起作用,需要重启服务才能使得 已运行的topic的queue个数真正生效。
有两种方式,可动态更改topic以及topic相关的属性,
第一种、编辑 master机器的/root/store/config/topic.json文件,找到topic名称为"topicQueueOffsetCheck"的数据,更新其readQueueNums、writeQueueNums两个属性,并重启master集群和slave集群
第二种方式:在rocketmq控制台动态更新topic相关数据(此方式更改后,会自动同步topic数据到其他master、其他slave,可以不用重启master、slave服务),此处我采用的是第二种方式更新。
更新server端的queue为12,再次发送2000条消息,发现新旧两种队列的消息offset基本已达到均衡。
queueId为0-7的队列,消息较多,各个队列的消息offset几乎相同,消息负载平衡;
queueId为8-11的队列,消息较少,是为新增的4个队列,这四个队列之间的offset也基本达到了平衡。
纵观这12个队列保存的消息, queueId=0的队列,上一次的offset偏移量为508,本次offset=594,差值594-508=86,其余quereId的消息差异量也基本在83左右。说明 动态更新queueNums,水平扩容之后, queue队列在接受到消息后任能够均衡存储消息。
从此例分析出:queue收到的消息均衡分布,指的是每个queue每次收到消息的增加量能达到均衡;并不是指扩容后新增的queue队列的offset需要从0增加到原有队列的offset,而原有queue需等待直至所有queue的消息偏移量offset均达到同一水平的情况。
保持queueNums=12不变,增大线程个数和次数,发送6*3000=18000条消息,再次记录消息offset,最终结果如下,所有queue的“接受消息”的新增偏移量,均能达到平衡。
保持queueNums=12不变,增大线程个数和次数,发送6*4000=24000条消息,记录保存消息的brokerName、queueId。
分析日志,可得出结论,消息的确均衡分布到了 broker-master1、broker-master2两台机器的各个队列。
二 评测结果
1、客户端发送的消息,服务器集群收到消息后,能均衡分布到集群的每台多台master机器,且每台机器的每个queue接受到的消息也是均衡分布。
2、动态增加queueNums个数,水平扩容之后,新增的、原来的queue接受到的消息数也能达到均衡分布。
3、服务端创建topic时会设置默认的queueNums数值,该数值的优先级高于创建producer所设置的defaultQueueNums。
4、对于已在运行的topic,若需动态更新topic的相关属性,推荐使用rocketmq的控制台,通过控制台动态更新。
感谢各位的阅读!关于“如何实现RocketMQ队列queue的偏移量Offset均衡分布测试”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。