RocketMQ-控制台Broker 5min Trend图

Broker 5min Trend

在这里插入图片描述

这个图中的趋势,是根据broker中统计的getTotalTps进行计算得来

brokerTps = [(10s avg tps of broker) + (1min avg tps of broker) + (10min avg tps of broker)]/3

而broker中的tps只计算拉取次数,而不管拉取的消息条数,默认情况下pushConsumer一次拉取32条,在消息生产速度远大于消费速度时,brokerTps*32=实际拉取消息的Tps

关键的几行代码如下:
//MQ DefaultMessageStore.java getMessage
getResult = new GetMessageResult(maxMsgNums);
if (GetMessageStatus.FOUND == status) {
    this.storeStatsService.getGetMessageTimesTotalFound().add(1);
} else {
    this.storeStatsService.getGetMessageTimesTotalMiss().add(1);
}

//MQ StoreStatsService getGetTotalTps
private String getGetTotalTps() {
    StringBuilder sb = new StringBuilder();

    sb.append(this.getGetTotalTps(10));
    sb.append(" ");

    sb.append(this.getGetTotalTps(60));
    sb.append(" ");

    sb.append(this.getGetTotalTps(600));

    return sb.toString();
}

//Console DashboardCollectTask collectBroker
String[] tpsArray = kvTable.getTable().get("getTotalTps").split(" ");
BigDecimal totalTps = new BigDecimal(0);
for (String tps : tpsArray) {
    totalTps = totalTps.add(new BigDecimal(tps));
}
BigDecimal averageTps = totalTps.divide(new BigDecimal(tpsArray.length), 5, BigDecimal.ROUND_HALF_UP);

数据的必要性

我觉得这个数据没有什么参考意义,实际应该关注的是消息生产或是消费的具体条数tps,而不是拉取次数

参考链接:

https://github.com/apache/rocketmq/issues/3800#:~:text=It%20is%20calculate%20by%20the%20metric%20getTotalTps%2C%20which,org.apache.rocketmq.store.DefaultMessageStore%23getMessage%20is%20called%2C%20getMessageTimesTotalFound%20or%20getMessageTimesTotalMiss%20is%20incremented.


版权声明:本文为zhangjun039009原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。