背景
业务团队在排查系统耗时时,说是定位到MQ这里耗时比较严重,本着严谨负责的心态,用集群的实际的延迟数据说话,排除集群本身的问题。
命令讲解
进入RocketMQ的安装目录,bin目录下有一个mqadmin命令,可以用来运维、管理、测试集群,直接不带参数执行该命令,会列出所有支持的子命令。
发现有两个命令可以检查集群的RT情况:
- checkMsgSendRT: 检查消息发送延迟情况(response time)
- clusterRT: 检查所有集群(可以理解为master-slave组,对应broker.conf中的brokerName)的延迟情况
checkMsgSendRT是以生产者的角度,检查发送消息的延迟情况,而clusterRT更关注的是集群中每组主从子集群的延迟情况,后面可以根据每个命令的参数来做了解。
命令实操
checkMsgSendRT
参数:
[root@mq01 bin]# ./mqadmin checkMsgSendRT -h
usage: mqadmin checkMsgSendRT [-a <arg>] [-h] [-n <arg>] -s <arg> -t <arg>
-a,--amount <arg> message amount | default 100
-h,--help Print help
-n,--namesrvAddr <arg> Name server address list, eg: 192.168.0.1:9876;192.168.0.2:9876
-s,--size <arg> message size | default 128 Byte
-t,--topic <arg> topic name
[root@mq01 bin]#
[root@mq01 bin]#
参数 | 含义 | 备注 |
---|---|---|
-h,–help | 打印help信息 | |
-n,–namesrvAddr | nameserver服务地址列表 | 必填 |
-a,–amount | 消息数量 | 默认:100 |
-s,–size | 消息大小 | 默认:128 Byte |
-t,–topic | topic名称 | 必填 |
示例:
root@XXGL-T-TJSYZ-REDIS-01 bin]# ./mqadmin checkMsgSendRT -n 172.24.30.192:9876 -a 10 -s 64 -t zhurunhua
RocketMQLog:WARN No appenders could be found for logger (io.netty.util.internal.PlatformDependent0).
RocketMQLog:WARN Please initialize the logger system properly.
#Broker Name #QID #Send Result #RT
broker-b 0 true 211
broker-b 1 true 2
broker-b 2 true 7
broker-b 3 true 2
broker-b 4 true 3
broker-b 5 true 3
broker-b 6 true 3
broker-b 7 true 3
broker-c 0 true 6
broker-c 1 true 3
Avg RT: 3.56
[root@XXGL-T-TJSYZ-REDIS-01 bin]#
命令会输出每条消息的发送耗时和平均耗时,但是没有标明单位,经过查看源码,证实单位为ms:
clusterRT
参数:
[root@mq01 bin]# ./mqadmin clusterRT -h
usage: mqadmin clusterRT [-a <arg>] [-c <arg>] [-h] [-i <arg>] [-m <arg>] [-n <arg>] [-p <arg>] -s <arg>
-a,--amount <arg> message amount | default 100
-c,--cluster <arg> cluster name | default display all cluster
-h,--help Print help
-i,--interval <arg> print interval | default 10 seconds
-m,--machine room <arg> machine room name | default noname
-n,--namesrvAddr <arg> Name server address list, eg: 192.168.0.1:9876;192.168.0.2:9876
-p,--print log <arg> print as tlog | default false
-s,--size <arg> message size | default 128 Byte
[root@mq01 bin]#
[root@mq01 bin]#
参数 | 含义 | 备注 |
---|---|---|
-h,–help | 打印help信息 | |
-n,–namesrvAddr | nameserver服务地址列表 | 必填 |
-a,–amount | 消息数量 | 默认:100 |
-c,–cluster | 指定cluster名称 | 不指定则打印所有 |
-i,–interval | 打印间隔 | 默认:10秒 |
-m,–machine room | 机器room name | 默认:noname |
-p,–print log | 以日志形式打印 | true|false(默认) |
-s,–size | 消息大小 | 默认:128 Byte |
[root@XXGL-T-TJSYZ-REDIS-01 bin]# ./mqadmin clusterRT -n 172.24.30.192:9876 -s 128 -i 3
RocketMQLog:WARN No appenders could be found for logger (io.netty.util.internal.PlatformDependent0).
RocketMQLog:WARN Please initialize the logger system properly.
#Cluster Name #Broker Name #RT #successCount #failCount
xdf-test1 broker-b 1.82 50 0
xdf-test1 broker-c 1.53 50 0
xdf-test1 broker-a 1.27 50 0
xdf-test1 broker-b 1.78 50 0
xdf-test1 broker-c 1.49 50 0
xdf-test1 broker-a 0.88 50 0
xdf-test1 broker-b 0.90 50 0
xdf-test1 broker-c 1.08 50 0
xdf-test1 broker-a 0.94 50 0
xdf-test1 broker-b 0.86 50 0
xdf-test1 broker-c 0.92 50 0
xdf-test1 broker-a 0.49 50 0
值得注意的是,我们并没有指定topic,那消息发送到哪个topic了呢?继续看源码:
Message的构造方法,第一个参数为topic:
也就是说命令使用的是内部自动创建好的topic,集群在创建时,会默认把集群名、每个broker的名称新建为topic。
经过一顿的操作,集群本身肯定是没问题的,其他方面的问题,诸如网络、业务代码的问题,那就需要进一步排查了。
想了解mqadmin其他子命令和用途的,可以查看我的另一篇文章:官方运维管理命令mqadmin使用手册(讲解+实操)