文档章节

Rocketmq集群消费测试

tantexian
 tantexian
发布于 2016/06/30 23:12
字数 1961
阅读 702
收藏 3

一 机器部署

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结果
5 2 C1:3
C2:2
6 3 C1:3
C2:3
10 20 C1-C10:1
C11-C20:0
20 6 C1: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机器 消费条数
Master1 Master2
8 5 C1:4 C1:4 4 0 8
C2:3 C2:3 1 2 3
C3:3 C3:3 0 3 3
C4:3 C4:3 3 0 3
C5:3 C5:3 0 3 3

    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机器 消费条数
Master1 Master2
8 8 C1:2 C1:2 2 0 4
C2:2 C2:2 0 2 2
C3:2 C3:2 0 2 2
C4:2 C4:2 0 2 2
C5:2 C5:2 0 2 2
C6:2 C6:2 2 0 4
C7:2 C7:2 2 0 2
C8:2 C8:2 2 0 2

    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机器 消费条数
Master1 Master2
8 4 C1:4 C1:4 4 0 8
C2:4 C2:4 4 0 4
C3:4 C3:4 0 4 4
C4:4 C4:4 0 4 4

    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机器 消费条数
Master1 Master2
4 8 C1:1 C1:1 1 0 3
C2:1 C2:1 1 0 3
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
C7:1 C7:1 1 0 3
C8:1 C8:1 1 0 3

    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机器 消费条数
Master1 Master2
3 7 C1:1 C1:1 0 1 3
C2:1 C2:1 1 0 4
C3:1 C3:1 0 1 3
C4:1 C4:1 1 0 3
C5:1 C5:1 1 0 4
C6:1 C6:1 0 1 3
C7:0 C7:0 0 0 0

    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端将不能消费消息。

    

© 著作权归作者所有

tantexian
粉丝 225
博文 527
码字总数 746616
作品 0
成都
架构师
私信 提问
说说MQ之RocketMQ(一)

原文出处:Valleylord RocketMQ 是出自 A 公司的开源产品,用 Java 语言实现,在设计时参考了 Kafka,并做出了自己的一些改进,消息可靠性上比 Kafka 更好,目前,RocketMQ 的文档仍然不够丰...

Valleylord
2018/10/12
0
0
让你rocketmq用得比预期要好的 1 种方法

匠心零度 转载请注明原创出处,谢谢! 方法 让你rocketmq用得比预期要好的 1 种方法:就是认真思考下面的几个问题: 使用rocketmq能解决那些问题?那些问题是不能解决的? 我们什么时候该添加...

匠心零度
2018/04/19
0
0
滴滴出行基于RocketMQ构建企业级消息队列服务的实践

本文整理自滴滴出行消息队列负责人 江海挺 在Apache RocketMQ开发者沙龙北京站的分享。通过本文,您将了解到滴滴出行: 1. 在消息队列技术选型方面的思考; 2. 为什么选择 RocketMQ 作为出行...

阿里巴巴中间件
2018/11/01
0
0
RocketMQ与Kafka对比

RocketMQ与Kafka对比(18项差异) 淘宝内部的交易系统使用了淘宝自主研发的Notify消息中间件,使用Mysql作为消息存储媒介,可完全水平扩容,为了进一步降低成本,我们认为存储部分可以进一步...

莫问viva
2015/05/08
615
0
​在 Spring Boot 中快速集成 RocketMQ - RocketMQ-Spring

为了帮助开发者在 Spring Boot 中快速集成 RocketMQ 并支持 Spring Message 规范,使开发者从其它 MQ 快速切换到 RocketMQ,Apache RocketMQ 社区推出了 RocketMQ SpringBoot 项目。 前提条件...

匿名
01/23
4.6K
3

没有更多内容

加载失败,请刷新页面

加载更多

代理模式之JDK动态代理 — “JDK Dynamic Proxy“

动态代理的原理是什么? 所谓的动态代理,他是一个代理机制,代理机制可以看作是对调用目标的一个包装,这样我们对目标代码的调用不是直接发生的,而是通过代理完成,通过代理可以有效的让调...

code-ortaerc
今天
5
0
学习记录(day05-标签操作、属性绑定、语句控制、数据绑定、事件绑定、案例用户登录)

[TOC] 1.1.1标签操作v-text&v-html v-text:会把data中绑定的数据值原样输出。 v-html:会把data中值输出,且会自动解析html代码 <!--可以将指定的内容显示到标签体中--><标签 v-text=""></......

庭前云落
今天
8
0
VMware vSphere的两种RDM磁盘

在VMware vSphere vCenter中创建虚拟机时,可以添加一种叫RDM的磁盘。 RDM - Raw Device Mapping,原始设备映射,那么,RDM磁盘是不是就可以称作为“原始设备映射磁盘”呢?这也是一种可以热...

大别阿郎
今天
12
0
【AngularJS学习笔记】02 小杂烩及学习总结

本文转载于:专业的前端网站☞【AngularJS学习笔记】02 小杂烩及学习总结 表格示例 <div ng-app="myApp" ng-controller="customersCtrl"> <table> <tr ng-repeat="x in names | orderBy ......

前端老手
昨天
16
0
Linux 内核的五大创新

在科技行业,创新这个词几乎和革命一样到处泛滥,所以很难将那些夸张的东西与真正令人振奋的东西区分开来。Linux内核被称为创新,但它又被称为现代计算中最大的奇迹,一个微观世界中的庞然大...

阮鹏
昨天
20
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部