这里是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
https://github.com/apache/rocketmq-exporter/pulls
相关讨论可以参考这个issues
https://github.com/apache/rocketmq-exporter/issues/114