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

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

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

所以打算研究下看看RocketMQ中的 broker TPSbroker 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...

相关推荐
Moment4 分钟前
太好了!NestJS 12 大版本转向 ESM,新项目默认构建换 Rspack
前端·javascript·后端
名字还没想好☜18 分钟前
Go 用 -race 抓数据竞争:一个偶发崩溃的排查、原理与修复
开发语言·后端·golang·go
学习星球32 分钟前
CodeWhale 深度剖析:从 DeepSeek-TUI 到 40.9K Star 的 Rust 终端编程 Agent
开发语言·后端·rust
Rain的Java大神之路37 分钟前
高并发下的热点账户余额扣减:Redis+Lua脚本实现无锁记账
java·spring boot·redis·后端·spring cloud·缓存·lua
kgduu43 分钟前
moduo之http
后端
烂蜻蜓4 小时前
Flask入门教程(二十六):Session API——用户会话状态管理
后端·python·flask
郑州光合科技余经理6 小时前
本地生活服务系统:成品模块和定制接口怎么划界
java·前端·人工智能·后端·系统架构·php·ai编程
朦胧之12 小时前
PostgreSQL 数据库笔记
人工智能·后端
IT_陈寒14 小时前
Redis缓存雪崩把我坑惨了,这次长记性了
前端·人工智能·后端
LucianaiB14 小时前
用 WorkBuddy 研究腾讯、阿里和 DeepSeek,我没敢直接说「AI 很赚钱」
后端