聊聊RocketMQ中的broker的TPS和QPS为何相差巨大,是如何统计的

这里是weihubeats ,觉得文章不错可以关注公众号小奏技术,文章首发。拒绝营销号,拒绝标题党

最近在看RocketMQ的一些监控指标的时候,总觉得一些监控指标不太对,好像对不上。

所以打算研究下看看RocketMQ中的 broker TPS、broker QPS,producer TPS 这些指标是怎么统计出来的。为什么broker的QPS有时候会和TPS相差很大

Broker TPS

我们先来看看broker TPS是如何统计的吧

这里我们直接以最新的rocketmq-exporter源码进行查看

这里可以看到exporter主要是通过获取BrokerStatsManager.BROKER_PUT_NUMS这个指标来上报broker TPS的

我们去RocketMQ源码看看这个指标是如何统计的

首先找到org.apache.rocketmq.common.stats.Stats#BROKER_PUT_NUMS

然后我们看看调用,具体是在哪里进行计数的

计数的地方有两个,一个是每次加1,一次是每次添加指定的数量

我们先看看加1的地方

这里可以看到是消息存储成功后就加+1,也就是每次消息发送成功后就+1

我们再看看另一个一个批量添加数据的地方

可以看到也是消息发送成功存储后就计数,这里包含的一些消息有比如PoP方式的消息、普通消息、延时消息、request-reply消息等

总结: 总的来说broker TPS的统计方式就通过统计每秒总共发送了多少消息量

Broker QPS

我们还是看看broker QPS是如何统计的

这里的指标主要是BrokerStatsManager.BROKER_GET_NUMS

我们去RocketMQ源码看看是如何统计的

可以看到拉取消息的时候会进行计数,也就是消息消费时候统计的。

所以QPS就是每秒消息消费的QPS

为什么QPS和TPS差异那么大

实际这是正常的,比如我们的TPS是2w,也就是每秒我们发送了2w的消息,我们每条消息如果是3个消费者,就是一条消息被消费3次,就是QPS差不多相比TPS会多4倍,差不多是6W左右

所以一般QPS都会高于TPS

producer TPS

producer TPS是以为Topic为,正常所有topic的 TPS之和应该是等于broker的TPS

总结

总的来说一般一条消息会被多个业务方消费,所以QPS都是会大于TPS的。

TPS主要是统计写消息量

QPS主要是统计读(消费)消息量

主要注意的是rocketmq-exporter官方目前的统计是有一个小bug的

统计的一些QPS、TPS改成统计的是TPM。所以如果要修复这个bug可以参考这个pr

github.com/apache/rock...

相关讨论可以参考这个issues

github.com/apache/rock...

相关推荐
万少3 小时前
Qoder sonus模型 20分钟,复刻 马斯克 飞天汽车
前端·后端·算法
白露与泡影3 小时前
Spring Boot 实现验证码:Hutool-captcha、AJ-Captcha、EasyCaptcha 到底怎么选?
java·spring boot·后端
小蒜学长3 小时前
基于Springboot+Vue的高校教师教学业绩综合管理系统的设计与开发(代码+数据库+LW)
java·数据库·spring boot·后端·教学业绩管理·三级权限
熊哈哈O_o3 小时前
千亿级时序数据:存储压缩、高速写入与时序超表技术
后端
Mikko73 小时前
Spring Boot 3.5.16 自带的 Tomcat 10.1.55 中了哪些 CVE?其中一条是修上一个漏洞时带进来的
java·spring boot·后端·安全·tomcat
站大爷IP4 小时前
Python的字符串查找把我坑惨了,原来find和index的区别这么大
后端
sp424 小时前
一个支持 Java 8 的 MCP SDK(支持最新 2026-07-28 协议)
后端·mcp
Gopher_HBo4 小时前
HTTP2传输层与流控
后端
Bazingga4 小时前
同一个脑子,不同的身体:桌面办公智能体全景拆解
后端
用户302822530684 小时前
你的 API 只返回 30 条,为什么数据库还是被打满了?
数据库·后端·架构