文档章节

RocketMQ队列queue的偏移量Offset均衡分布测试

tantexian
 tantexian
发布于 2016/06/30 23:08
字数 1143
阅读 1438
收藏 0

一 机器部署

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的控制台,通过控制台动态更新。

   

© 著作权归作者所有

tantexian
粉丝 225
博文 527
码字总数 746616
作品 0
成都
架构师
私信 提问
一文讲透Apache RocketMQ技术精华

嘉宾介绍:刘振东 阿里巴巴中间件技术专家,2016年中间件性能挑战赛亚军,具有丰富的分布式系统设计和优化经验,目前负责Apache RocketMQ新航道探索和创新。 分享文章内容包括RocketMQ的起源...

架构师技术联盟
2018/11/07
0
0
[RocketMQ]消息中间件—RocketMQ消息消费(二)(push模式实现)

摘要:在RocketMQ中,消息消费都是基于Pull消息方式,那么Push模式中又是如何实现Consumer端准实时消费的呢? 在上一篇—“消息中间件—RocketMQ消息消费(一)”中,已经简要地介绍了下Roc...

morpheusWB
2018/09/29
86
0
分布式消息系列:详解RocketMQ的简介与演进、架构设计、关键特性与应用场景

终身学习是程序员的必备能力,一群人在一起走得更远,一起学习,共抗惰性。今天,我们来重点了解RocketMQ的简介与演进、架构设计、关键特性及应用场景等内容。 本文内容大纲: RocketMQ的简介...

mikechen优知
01/11
235
0
[RocketMQ]消息中间件—RocketMQ消息消费(一)

文章摘要:在发送消息给RocketMQ后,消费者需要消费。消息的消费比发送要复杂一些,那么RocketMQ是如何来做的呢? 在RocketMQ系列文章的前面几篇幅中已经对其“RPC通信部分”和“普通消息发送...

morpheusWB
2018/09/29
233
0
消息中间件—RocketMQ消息消费(一)

文章摘要:在发送消息给RocketMQ后,消费者需要消费。消息的消费比发送要复杂一些,那么RocketMQ是如何来做的呢? 在RocketMQ系列文章的前面几篇幅中已经对其“RPC通信部分”和“普通消息发送...

癫狂侠
2018/08/12
0
0

没有更多内容

加载失败,请刷新页面

加载更多

JAVA 编写redisUtils工具类,防止高并发获取缓存出现并发问题

import lombok.extern.slf4j.Slf4j;import org.springframework.data.redis.core.BoundHashOperations;import org.springframework.data.redis.core.BoundValueOperations;import org.......

huangkejie
27分钟前
3
0
JMM内存模型(一)&volatile关键字的可见性

在说这个之前,我想先说一下计算机的内存模型: CPU在执行的时候,肯定要有数据,而数据在内存中放着呢,这里的内存就是计算机的物理内存,刚开始还好,但是随着技术的发展,CPU处理的速度越...

走向人生巅峰的大路
45分钟前
89
0
你对AJAX认知有多少(2)?

接着昨日内容,我们几天继续探讨ajax的相关知识点 提到ajax下面几个问题又是必须要了解的啦~~~ 8、在浏览器端如何得到服务器端响应的XML数据。 通过XMLHttpRequest对象的responseXMl属性 9、 ...

理性思考
54分钟前
4
0
正则表达式基础(一)

1.转义 转义的作用: 当某个字符在表达式中具有特殊含义,例如字符串引号中出现了引号,为了可以使用这些字符本身,而不是使用其在表达式中的特殊含义,则需要通过转义符“\”来构建该字符转...

清自以敬
57分钟前
4
0
idea中@Data标签getset不起作用

背景:换电脑以后在idea中有@data注解都不生效 解决办法:idea装个插件 https://blog.csdn.net/seapeak007/article/details/72911529...

栾小糖
今天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部