最近发现部署rocketmq-dashboard的服务器磁盘满了,查找了一番原因:后台每秒打印警告:
Exception caught: mqAdminExt get broker stats data TOPIC_PUT_NUMS failed...
Exception caught: mqAdminExt get broker stats data GROUP_GET_NUMS failed, topic...
查看rocketmq-dashboard代码,是收集统计数据的定时任务打印的警告日志,遍历了topic和group,从broker获取统计数据,方法是:collectTopic定时任务。
果断更新到最新版后,统计时间改为每分钟统计一次。警告照常打印。
为什么会打印呢?
public BrokerStatsData viewBrokerStatsData(String brokerAddr, String statsName, String statsKey, long timeoutMillis)
throws MQClientException, RemotingConnectException, RemotingSendRequestException, RemotingTimeoutException,
InterruptedException {
ViewBrokerStatsDataRequestHeader requestHeader = new ViewBrokerStatsDataRequestHeader();
requestHeader.setStatsName(statsName);
requestHeader.setStatsKey(statsKey);
RemotingCommand request = RemotingCommand.createRequestCommand(RequestCode.VIEW_BROKER_STATS_DATA, requestHeader);
RemotingCommand response = this.remotingClient
.invokeSync(MixAll.brokerVIPChannel(this.clientConfig.isVipChannelEnabled(), brokerAddr), request, timeoutMillis);
assert response != null;
switch (response.getCode()) {
case ResponseCode.SUCCESS: {
byte[] body = response.getBody();
if (body != null) {
return BrokerStatsData.decode(body, BrokerStatsData.class);
}
}
default:
break;
}
throw new MQClientException(response.getCode(), response.getRemark());
}
源码得出,统计时没有获取到数据,throw new MQClientException
为什么没有取到数据?
查看源码的得出结论:
只有实际收发消息的时候才会创建统计条目,如果一直没有消息收发的话,也就找不到对应的统计数据了,找不到数据就抛出了一个异常
这里就不贴出源码了,有兴趣的可以自己查看。定时任务位置:DashboardCollectTask.collectTopic
解决方法:
不同的版本,调用方法差不多,全局搜索一下:Exception caught: mqAdminExt get broker stats data TOPIC_PUT_NUMS failed, topic
把日志等级更改为bug -> log.warn改为log.bug
这个警告不影响任何开发和使用,可以忽略。因此我这里只是简单的更改了一下日志等级。