消息队列RocketMQ性能测试案例

异步棱镜
• 阅读 2839

1. 消息队列RocketMQ性能测试案例

1.1 RocketMQ测试分析

客户场景,信息共享交换平台:
1.交换平台需支持每秒万级别数据传输
2.实现跨路段、跨部门、跨行业、跨区域信息即时共享,做到高可靠、低延迟

消息队列RocketMQ性能测试案例

客户现场展示场景设计思路:
1.针对性的编写一套JAVA代码来支撑本次MQ性能POC验证。
2.选择合适规格的单台ECS,在单个TOPIC下运行多线程代码实现和MQ的订阅发送,统计1分钟内订阅和发送的数据交换TPS情况。
3.考虑POC也要符合客户实际生产场景中MQ使用逻辑,ECS应运行4个独立的JAR包,两对JAR包交叉经过MQ进行数据交换。
4.消息体内的内容应打印到屏幕,通过消息轨迹验证消息的被消费情况。
5.验证结果:客户指定场景下8线程异步,1分钟TPS在10K以上。

1.2 创建资源

本章节详细描述如何创建消息队列 RocketMQ 版的资源。

1.2.1 创建RocketMQ实例

1.登录Apsara Stack控制台。
2.在左侧导航栏中单击中间件产品 > 消息队列访问管理控制台界面。

消息队列RocketMQ性能测试案例

3.在消息队列页面,选择区域与部门后,单击MQ,进入MQ控制台。

消息队列RocketMQ性能测试案例

4.单击左侧导航栏概览后,在概览页面中,单击创建实例。
5.在创建实例对话框,选择实例类型,并输入实例名和描述,然后单击确认。

消息队列RocketMQ性能测试案例

说明: 创建完实例后,单击左侧导航栏实例详情,可以查看创建实例的Topic数上限、消息发送TPS上限、消息订阅TPS上限和TCP协议接入地址等。

1.2.2 创建 Topic

Topic 是消息队列 RocketMQ 版里对消息的一级归类,例如可以创建 Topic_Trade 这一 Topic 来识别交易类消息,消息生产者将消息发送到 Topic_Trade,而消息消费者则通过订阅该 Topic 来获取和消费消息。
创建Topic要注意一下几点:

  • Topic 不能跨实例使用,例如在实例 A 中创建的 Topic A 不能在实例 B 中使用。
  • Topic 名称必须在同一实例中是唯一的。
  • 您可创建不同的 Topic 来发送不同类型的消息,例如用 Topic A 发送普通消息,Topic B 发送事务消息,Topic C 发送定时/延时消息。

1.在控制台左侧导航栏,单击 Topic 管理。
2.在 Topic 管理页面上方选择刚创建的实例,单击创建 Topic 按钮。

消息队列RocketMQ性能测试案例

3.在创建 Topic 对话框中的 Topic 一栏,输入 Topic 名称,选择该 Topic 对应的消息类型,输入该 Topic 的备注内容,然后单击确定。

1.2.3 创建 Group ID

创建完实例和 Topic 后,您需要为消息的消费者(或生产者)创建客户端 ID ,即 Group ID 作为标识。

  • Group ID 必须在同一实例中是唯一的。
  • Group ID 和 Topic 的关系是 N:N,即一个消费者可以订阅多个 Topic,同一个 Topic 也可以被多个消费者订阅;一个生产者可以向多个 Topic 发送消息,同一个 Topic 也可以接收来自多个生产者的消息。

1.在控制台左侧导航栏,单击 Group 管理。
2.在 Group 管理页面上方选择刚创建的实例,然后选择TCP协议 > 创建Group ID 。本文以 TCP 协议为例。

消息队列RocketMQ性能测试案例

3.在创建 Group ID 对话框中,输入 Group ID 和描述,然后单击确认。

1.3 场景落地

1.准备p1,c1,p2,c2双发送双订阅应用小程序,p1、p2小程序参考“第二章节”生产者异步发送消息代码,c1、c2小程序参考“第二章节”消费者集群订阅消息代码
p1-8081.jar
c1-8083.jar
p2-8082.jar
c2-8084.jar
2.通过Xshell连接到专有云ops1环境,把准备的4个jar包上传至一台16c32gECS服务器上

消息队列RocketMQ性能测试案例

3.同时在该目录下编写启动4个jar包的start.sh脚本:
#!/bin/bash
nohup java -jar p1-8081.jar &
nohup java -jar p2-8081.jar &
nohup java -jar c1-8081.jar &
nohup java -jar c2-8081.jar &
4.编写停用4个jar包的stop.sh脚本:

消息队列RocketMQ性能测试案例

5.编写请求消息队列2个发送和2个订阅接口的curl脚本:
#!/bin/bash
curl http://192.168.0.150:8081/echo-sync-final-send
curl http://192.168.0.150:8082/echo-sync-final-send
curl http://192.168.0.150:8083/echo-final-mq
curl http://192.168.0.150:8084/echo-final-mq
6../start.sh执行启动4个jar包,通过tail -f nohup.out查看启动日志,每个jar包启动完成日志如下:

消息队列RocketMQ性能测试案例

7.通过ps -ef | grep jar确认4个jar是否在ECS服务器运行,有如下图则表示4个应用小程序运行正常:
消息队列RocketMQ性能测试案例

8../curl.sh执行请求2个消息发送和2个消息订阅接口,请求之后我们查看一下程序后台日志发现代码打印的消息发送和消息订阅的日志不停的在刷,截取单条消息发送日志如下:

消息队列RocketMQ性能测试案例

截取单条消息订阅日志如下:

消息队列RocketMQ性能测试案例

1.4 消息查询

如遇消息消费有问题,则可通过查询具体发送的消息内容来排查问题。消息队列 RocketMQ 版提供了三种消息查询的方式,分别是按 Message ID、Message Key 以及 Topic 查询。

1.4.1 查询方式说明

三种查询方式的特点和对比如下表所述。
表1:查询方式对比
消息队列RocketMQ性能测试案例

1.4.2 推荐查询过程

推荐按照以下流程查询消息。

消息队列RocketMQ性能测试案例

1.4.3 查询步骤

1.登录MQ控制台。
2.在左侧导航栏,单击消息轨迹。
3.在消息轨迹页面,您可单击以下任一页签,然后按页面提示输入相应信息,再单击搜索按钮来查询消息。

  • 按 Message ID 查询

按 Message ID 查询消息属于精确查询,您输入 Topic 和 Message ID 即可精确查询到任意一条消息。因此,为了尽可能精确地查询,建议在发送消息成功后将 Message ID 信息打印到日志中,方便问题排查。

消息队列RocketMQ性能测试案例

  • 按 Message Key 查询

消息队列 RocketMQ 版根据您设置的 Message Key 建立消息的索引信息,当您输入 Key 进行查询时,消息队列 RocketMQ 版根据该索引即可匹配相关的消息返回。

消息队列RocketMQ性能测试案例

  • 按 Topic 查询

按 Topic 查询一般用在 Message ID 和 Message Key 都无法获得的情况下,根据 Topic 和消息的发送时间范围,批量获取该时间范围内的所有消息,然后再找到关心的数据。

消息队列RocketMQ性能测试案例

4.在操作栏中单击消息详情,可查看到轨迹的简要信息,主要是消息本身的属性以及接收状态的信息。

消息队列RocketMQ性能测试案例

5.在展开的区域中,单击查看轨迹即可查看完整的链路图。下图示例为在 TCP 协议下,按 Message ID 查询普通消息的轨迹。

消息队列RocketMQ性能测试案例

对于 Message Key 和 Topic 查询方式,如果匹配到多条轨迹,可以进行上下翻页,查看比对轨迹数据。

1.4.4 查询结果说明

您可以在控制台的消息查询页面看到查询到的消息。直接显示的信息包含 Message ID、Tag、Key 和存储时间。此外,您还可以在每一行消息操作列下载消息内容、查询信息轨迹以及查看消息详情。
投递状态是消息队列 RocketMQ 版根据各个 Group ID 的消费进度计算出的结果,投递状态的信息如下表所示。
表 2: 消息投递状态
消息队列RocketMQ性能测试案例

1.4.5 消费验证

消息队列 RocketMQ 版提供了消费验证功能,该功能可以将指定消息推送给指定的在线客户端,以检测客户端消费该消息的逻辑和结果是否符合预期。
说明: 消费验证功能仅仅是用于验证客户端的消费逻辑是否正常,并不会影响正常的收消息流程,因此消息的消费状态等信息在消费验证后并不会改变。

1.5 查看消息生产数据

可供查看的消息生产数据是某个Topic在一个时间段内从Broker接收的消息的总量或者TPS。
1.登录MQ控制台。
2.在左侧导航栏,单击资源报表。
3.在资源报表页面,单击消息生产页签。
4.在Topic一栏,选择Topic,并指定其他信息,然后单击搜索。
字段说明:

  • 采集类型:分为总量和TPS。总量提供该周期内Topic接收的消息总量;TPS提供每个周期内该Topic接收消息的平均TPS。
  • 采集周期:包括1分钟、10分钟后、30分钟、1小时。采集周期决定了数据采集的时间间隔,周期越短,采集点越密集,消息消费数据越详细。
  • 时间范围:RocketMQ最多可以提供最近三天之内的消息的生产查询。

查询结果以图表的形式显示

消息队列RocketMQ性能测试案例

消息队列RocketMQ性能测试案例

1.6 查看消息消费数据

可供查看的消息消费数据是某个Topic在一个时间段内投递给某个Group ID的消息的总量或TPS。
具体操作步骤如下:
1.登录MQ控制台。
2.在左侧导航栏,单击资源报表。
3.在资源报表页面,单击消息消费页签。
4.在Group ID和Topic栏,分别选择您要查询的Group ID和Topic。
5.指定其他信息,然后单击搜索。
字段说明:

  • 采集类型:分为总量和TPS。总量提供每个周期内该Topic投递给该Group ID的消息总量,TPS提供每个周期内该Topic投递给该Group ID消息的平均TPS。
  • 采集周期:包括1分钟、10分钟后、30分钟、1小时。采集周期决定了数据采集的时间间隔,周期越短,采集点越密集,消息消费数据越详细。
  • 时间范围:RocketMQ最多可以提供最近三天之内的消息的消费查询。

查询结果以图表的形式显示

消息队列RocketMQ性能测试案例

消息队列RocketMQ性能测试案例

原文链接
本文为阿里云原创内容,未经允许不得转载。

点赞
收藏
评论区
推荐文章
Stella981 Stella981
4年前
Spring Boot(十四)RabbitMQ延迟队列
一、前言延迟队列的使用场景:1.未按时支付的订单,30分钟过期之后取消订单;2.给活跃度比较低的用户间隔N天之后推送消息,提高活跃度;3.过1分钟给新注册会员的用户,发送注册邮件等。实现延迟队列的方式有两种:1.通过消息过期后进入死信交换器,再由交换器转发到延迟消费队列,实现延迟功能;2.使用rabbitmqdelayed
Stella981 Stella981
4年前
Kafka、RabbitMQ、RocketMQ等消息中间件的对比 —— 消息发送性能和区别
Kafka、RabbitMQ、RocketMQ等消息中间件的对比——消息发送性能和区别那么,消息中间件性能究竟哪家强?带着这个疑问,我们中间件测试组对常见的三类消息产品(Kafka、RabbitMQ、RocketMQ)做了
Stella981 Stella981
4年前
Kafka、ActiveMQ、RabbitMQ、RocketMQ 有什么优缺点?
面试题1.为什么使用消息队列?2.消息队列有什么优点和缺点?3.Kafka、ActiveMQ、RabbitMQ、RocketMQ都有什么区别,以及适合哪些场景?面试官心理分析其实面试官主要是想看看:第一,你知不知道你们系统里为什么要用消息队列这个东西?不少候选人,说自己项目里用了Redis、MQ,但是其实他并
Stella981 Stella981
4年前
Kafka、RabbitMQ、RocketMQ消息中间件的对比 —— 消息发送性能
引言分布式系统中,我们广泛运用消息中间件进行系统间的数据交换,便于异步解耦。现在开源的消息中间件有很多,前段时间我们自家的产品RocketMQ(MetaQ的内核)也顺利开源,得到大家的关注。那么,消息中间件性能究竟哪家强?带着这个疑问,我们中间件测试组对常见的三类消息产品(Kafka、RabbitMQ、RocketMQ)做了性
Stella981 Stella981
4年前
RokectMQ 顺序性 和分布式事务
1.顺序性是根据参数的id来使其同时投递到统一队列上。//RocketMQ通过MessageQueueSelector中实现的算法来确定消息发送到哪一个队列上//RocketMQ默认提供了两种MessageQueueSelector实现:随机/Hash//当然你可以根据业务实现自己的MessageQueueSelecto
Wesley13 Wesley13
4年前
MQ消息中间件,面试能问些什么?
MQ消息中间件,面试能问些什么?为什么使用消息队列?消息队列的优点和缺点?kafka、activemq、rabbitmq、rocketmq都有什么优缺点?面试官角度分析:(1)你知不知道你们系统里为什么要用消息队列这个东西?(2)既然用了消息队列这个东西,你知不知道用了有什么好处?(3
Wesley13 Wesley13
4年前
IM 消息服务架构
IM消息架构主要有1、消息redis缓存队列及用户信息memcache2、消息的数据落地(入库mysql)3、消息的发送4、离线消息服务5、过期消息服务消息redis缓存队列服务端落地队列1.客户端通过HTTPS
Stella981 Stella981
4年前
Message Queue消息队列基本原理
消息队列基本原理📦本文已归档到:「blog」消息队列(MessageQueue,简称MQ)技术是分布式应用间交换信息的一种技术。消息队列主要解决应用耦合,异步消息,流量削锋等问题,实现高性能,高可用,可伸缩和最终一致性架构。是大型分布式系统不可缺少的中间件。注意:_为了简便,下文中除了文章标
Stella981 Stella981
4年前
RabbitMQ 简介
概述RabbitMQ是基于AMQP实现的一个开源消息组件,主要用于在分布式系统中存储转发消息,由因高性能、高可用以及高扩展而出名的Erlang语言写成。特点高可靠:RabbitMQ提供了多种多样的特性让你在可靠性和性能之间做出权衡,包括持久化、发送应答、发布确认以及高可用性。高可用队列:支持跨机器集群,支持队列安全镜像
【京东云新品发布月刊】2024年7月产品动态
京东云7月产品动态:1.【消息队列RocketMQ】新品上线消息队列RocketMQ是京东云基于ApacheRocketMQ打造的一款低延迟、高并发、高可用、高可靠的分布式消息队列服务。支持开源客户端零改造接入,同时具备计算存储分离,灵活扩缩容的优势。能够
京东云开发者 京东云开发者
1个月前
工程师之夜系列分享第三十九篇:Kafka、RocketMQ、JMQ 存储架构深度对比
引言消息队列的存储架构是决定其可靠性、吞吐量、延迟性能的核心因素,直接影响业务场景适配能力。本文聚焦三款主流消息队列——Kafka(LinkedIn开源,侧重高吞吐)、RocketMQ(阿里开源,金融级特性突出)、JMQ(京东开源,侧重高可用与灵活性),从
异步棱镜
异步棱镜
Lv1
归雁横秋,倦客思家。
文章
4
粉丝
0
获赞
0