一、常用命令
# 配置环境变量
vim /etc/profile
---------------------------------
export JAVA_HOME=/usr/local/jdk
export PATH=$JAVA_HOME/bin:$PATH
export ROCKETMQ_HOME=/home/qiang/software/rocketmq-all-4.8.0-bin-release
export PATH=$ROCKETMQ_HOME/bin:$PATH
---------------------------------
source /etc/profile
# 启动nameserver
sh mqnamesrv >mqnamesrv.log 2>&1 &
# 停止nameserver
sh mqshutdown namesrv
# 启动broker
sh mqbroker -n 127.0.0.1:9876 autoCreateTopicEnable=true >mqbroker.log 2>&1 &
# 指定配置文件
sh mqbroker -n 127.0.0.1:9876 -c ../conf/broker.conf autoCreateTopicEnable=true >mqbroker.log 2>&1 &
# 停止broker
sh mqshutdown broker
# 查看topic列表
sh mqadmin topicList -n 127.0.0.1:9876
# 查看cluster列表
sh mqadmin clusterList -n 127.0.0.1:9876
sh mqadmin clusterList -n 127.0.0.1:9876 -m
# 创建主题
sh mqadmin updateTopic -t testTopic -c DefaultCluster -n 127.0.0.1:9876
# 删除主题
sh mqadmin deleteTopic -c DefaultCluster -t testTopic -n 127.0.0.1:9876
# 创建订阅组
sh mqadmin updateSubGroup -c DefaultCluster -g testGroup -n 127.0.0.1:9876
# 删除订阅组
sh mqadmin deleteSubGroup -c DefaultCluster -g testGroup -n 127.0.0.1:9876
# 查看所有消费者组
sh mqadmin consumerProgress -n 127.0.0.1:9876
# 查看指定主题的详细统计
sh mqadmin topicstatus -t testTopic -n 127.0.0.1:9876
# 查看broker所有的配置,一定要指定配置文件,否则配置文件会被替换掉
sh mqbroker -p ../conf/broker.conf
# 查看帮助命令,如查看topicList的帮助命令
sh mqadmin help topicList
二、详细命令参数
1.创建Topic
指令:updateTopic
用法:sh mqadmin updateTopic -t testTopic -c DefaultCluster -n 127.0.0.1:9876
参数 | 是否必填 | 说明 |
---|---|---|
-b | 如果-c为空,则必填 | broker 地址,表示topic 建在该broker |
-c | 如果-b为空,则必填 | cluster 名称,表示topic 建在该集群(集群可通过clusterList 查询) |
-h | 否 | 打印帮助 |
-n | 是 | nameserve 服务地址列表,格式ip:port;ip:port;... |
-p | 否 | 指定新topic 的权限限制( W|R|WR ) |
-r | 否 | 可读队列数(默认为8) |
-w | 否 | 可写队列数(默认为8) |
-t | 是 | topic 名称(名称只能使用字符 ^[a-zA-Z0-9_-]+$ ) |
2.删除Topic
指令:deleteTopic
用法:sh mqadmin deleteTopic -c DefaultCluster -t testTopic -n 127.0.0.1:9876
参数 | 是否必填 | 说明 |
---|---|---|
-c | 是 | cluster 名称,表示删除某集群下的某个topic (集群可通过clusterList 查询) |
-h | 否 | 打印帮助 |
-n | 是 | nameserve 服务地址列表,格式ip:port;ip:port;… |
-t | 是 | topic 名称(名称只能使用字符 ^[a-zA-Z0-9_-]+$ ) |
3.创建订阅组
指令:updateSubGroup
用法:sh mqadmin updateSubGroup -c DefaultCluster -g testGroup -n 127.0.0.1:9876
参数 | 是否必填 | 说明 |
---|---|---|
-b | 如果 –c 为空,则必填 | broker 地址,表示订阅组建在该broker |
-c | 如果 –b 为空,则必填 | cluster名称,表示topic 建在该集群(集群可通过clusterList查询) |
-d | 否 | 是否容许广播方式消费 |
-g | 是 | 订阅组名 |
-i | 否 | 从哪个broker 开始消费 |
-m | 否 | 是否容许从队列的最小位置开始消费,默认会设置为false |
-q | 否 | 消费失败的消息放到一个重试队列,每个订阅组配置几个重试队列 |
-r | 否 | 重试消费最大次数,超过则投递到死信队列,不再投递,并报警 |
-s | 否 | 消费功能是否开启 |
-w | 否 | 发现消息堆积后,将Consumer 的消费请求重定向到另外一台Slave 机器 |
-h | 否 | 打印帮助 |
-n | 是 | nameserve 服务地址列表,格式ip:port;ip:port;... |
4.删除订阅组配置
指令:deleteSubGroup
用法:sh mqadmin deleteSubGroup -c DefaultCluster -g testGroup -n 127.0.0.1:9876
参数 | 是否必填 | 说明 |
---|---|---|
-b | 如果–c 为空,则必填 | broker 地址,表示订阅组建在该broker |
-c | 如果–b 为空,则必填 | cluster 名称,表示topic建在该集群(集群可通过clusterList查询) |
-g | 是 | 订阅组名 |
-h | 否 | 打印帮助 |
-n | 是 | nameserve 服务地址列表,格式ip:port;ip:port;... |
5.更新Broker配置文件
指令:updateBrokerConfig
用法:sh mqadmin updateBrokerConfig -c DefaultCluster -k deleteWhen -v 04 -n 127.0.0.1:9876
参数 | 是否必填 | 说明 |
---|---|---|
-b | 如果–c为空,则必填 | broker 地址,表示订阅组建在该broker |
-c | 如果–b 为空,则必填 | cluster名称,表示topic 建在该集群(集群可通过clusterList查询) |
-k | 是 | key 值 |
-v | 否 | value 值 |
-h | 否 | 打印帮助 |
-n | 是 | nameserve 服务地址列表,格式ip:port;ip:port;... |
6.查看Topic列表信息
指令:topicList
用法:sh mqadmin topicList -n 127.0.0.1:9876
参数 | 是否必填 | 说明 |
---|---|---|
-h | 否 | 打印帮助 |
-n | 是 | nameserve 服务地址列表,格式ip:port;ip:port;... |
7. 查看Topic 路由信息
指令:topicRoute
用法:sh mqadmin topicRoute -t testTopic -n 127.0.0.1:9876
参数 | 是否必填 | 说明 |
---|---|---|
-t | 是 | topic 名称 |
-h | 否 | 打印帮助 |
-n | 是 | nameserve 服务地址列表,格式ip:port;ip:port;... |
8.查看Topic统计信息
指令:topicStatus
用法:sh mqadmin topicStatus -t testTopic -n 127.0.0.1:9876
参数 | 是否必填 | 说明 |
---|---|---|
-t | 是 | topic 名称 |
-h | 否 | 打印帮助 |
-n | 是 | nameserve 服务地址列表,格式ip:port;ip:port;... |
9.查看Broker统计信息
指令:brokerStatus
用法:sh mqadmin brokerStatus -n 127.0.0.1:9876
参数 | 是否必填 | 说明 |
---|---|---|
-b | 是 | broker 地址 |
-h | 否 | 打印帮助 |
-n | 是 | nameserve 服务地址列表,格式ip:port;ip:port;... |
10.根据消息ID查询消息
指令:queryMsgById
参数 | 是否必填 | 说明 |
---|---|---|
-i | 是 | 消息id |
-h | 否 | 打印帮助 |
-n | 是 | nameserve 服务地址列表,格式ip:port;ip:port;... |
11.根据消息Key查询消息
指令:queryMsgByKey
参数 | 是否必填 | 说明 |
---|---|---|
-f | 否 | 被查询消息的截止时间 |
-k | 是 | msgKey |
-t | 是 | topic 名称 |
-h | 否 | 打印帮助 |
-n | 是 | nameserve 服务地址列表,格式ip:port;ip:port;... |
12.根据Offset查询消息
指令:queryMsgByOffset
参数 | 是否必填 | 说明 |
---|---|---|
-b | 是 | Broker 名称,表示订阅组建在该broker(这里需要注意填写的是broker 的名称,不是broker 的地址,broker名称可以在clusterList 查到 |
-i | 是 | query 队列id |
-o | 是 | offset 值 |
-t | 是 | topic 名称 |
-h | 否 | 打印帮助 |
-n | 是 | nameserve 服务地址列表,格式ip:port;ip:port;... |
13.查询Producer的网络连接
该命令只打印当前与cluster 连接的producer 网络连接信息
指令:producerConnection
参数 | 是否必填 | 说明 |
---|---|---|
-g | 是 | 生产者所属组名 |
-t | 是 | topic 名称 |
-h | 否 | 打印帮助 |
-n | 是 | nameserve 服务地址列表,格式ip:port;ip:port;... |
14.查询Consumer的网络连接
该命令只打印当前与cluster 连接的consumer 网络连接信息
指令:consumerConnection
参数 | 是否必填 | 说明 |
---|---|---|
-g | 是 | 消费者所属组名 |
-h | 否 | 打印帮助 |
-n | 是 | nameserve 服务地址列表,格式ip:port;ip:port;... |
15.查看订阅组消费状态
指令:consumerProgress
参数 | 是否必填 | 说明 |
---|---|---|
-g | 是 | 消费者所属组名 |
-h | 否 | 打印帮助 |
-n | 是 | nameserve 服务地址列表,格式ip:port;ip:port;... |
16.查看集群消息
指令:clusterList
参数 | 是否必填 | 说明 |
---|---|---|
-m | 否 | 打印更多信息 |
-h | 否 | 打印帮助 |
-n | 是 | nameserve 服务地址列表,格式ip:port;ip:port;... |
17.添加KV配置信息
指令:updateKvConfig
参数 | 是否必填 | 说明 |
---|---|---|
-k | 是 | key 值 |
-v | 是 | value 值 |
-s | 是 | Namespace 值 |
-h | 否 | 打印帮助 |
-n | 是 | nameserve 服务地址列表,格式ip:port;ip:port;... |
18.删除KV配置信息
指令:deleteKvConfig
参数 | 是否必填 | 说明 |
---|---|---|
-k | 是 | key 值 |
-s | 是 | Namespace 值 |
-h | 否 | 打印帮助 |
-n | 是 | nameserve 服务地址列表,格式ip:port;ip:port;... |
19.添加Project group配置信息
指令:updateProjectGroup
参数 | 是否必填 | 说明 |
---|---|---|
-p | 是 | project group 名 |
-i | 否 | 服务器ip |
-h | 否 | 打印帮助 |
-n | 是 | nameserve 服务地址列表,格式ip:port;ip:port;... |
20.删除Project group配置信息
指令:deleteProjectGroup
参数 | 是否必填 | 说明 |
---|---|---|
-p | 是 | project group 名 |
-i | 否 | 服务器ip |
-h | 否 | 打印帮助 |
-n | 是 | nameserve 服务地址列表,格式ip:port;ip:port;... |
21.取得Project group配置信息
指令:getProjectGroup
参数 | 是否必填 | 说明 |
---|---|---|
-p | 是 | project group 名 |
-i | 否 | 服务器ip |
-h | 否 | 打印帮助 |
-n | 是 | nameserve 服务地址列表,格式ip:port;ip:port;... |
22.设置消费进度
根据时间来设置消费进度,设置之前要关闭这个订阅组的所有consumer,设置完再启动,方可生效
指令:resetOffsetByTime
参数 | 是否必填 | 说明 |
---|---|---|
-f | 否 | 通过时间戳强制回滚(true|false),默认为true |
-s | 是 | 时间戳 |
-g | 是 | 消费者所属组名 |
-t | 是 | topic 名称 |
-h | 否 | 打印帮助 |
-n | 是 | nameserve 服务地址列表,格式ip:port;ip:port;... |
23.清除特定Broker权限
指令:wipeWritePerm
参数 | 是否必填 | 说明 |
---|---|---|
-b | 是 | broker 地址 |
-h | 否 | 打印帮助 |
-n | 是 | nameserve 服务地址列表,格式ip:port;ip:port;... |
三、常用参数优化
3.1 启动broker内存过大
修改runbroker.sh文件
# 默认配置
JAVA_OPT="${JAVA_OPT} -server -Xms8g -Xmx8g -Xmn4g"
# 修改配置
JAVA_OPT="${JAVA_OPT} -server -Xms256m -Xmx256m -Xmn128m"
3.2 启动nameserv内存过大
修改runserver.sh文件
# 默认配置
JAVA_OPT="${JAVA_OPT} -server -Xms4g -Xmx4g -Xmn2g -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m"
# 修改配置
JAVA_OPT="${JAVA_OPT} -server -Xms256m -Xmx256m -Xmn128m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m"
四、常见问题
4.1 发送消息失败
问题:
Caused by: org.apache.rocketmq.remoting.exception.RemotingConnectException: connect to 172.31.0.1:10911 failed
分析:
1.服务器的多网卡导致,这里因为docker的虚拟网卡
解决:
1.修改broker.conf配置文件
---------------------------------------
brokerClusterName = DefaultCluster
brokerName = broker-a
brokerId = 0
deleteWhen = 04
fileReservedTime = 48
brokerRole = ASYNC_MASTER
flushDiskType = ASYNC_FLUSH
# 主要添加这两行
namesrvAddr = 192.168.17.101:9876
brokerIP1 = 192.168.17.101
---------------------------------------
2.指定配置文件启动
./mqbroker -n 127.0.0.1:9876 -c ../conf/broker.conf autoCreateTopicEnable=true >mqbroker.log 2>&1 &
4.2 磁盘占比过高
问题:
org.apache.rocketmq.client.exception.MQBrokerException: CODE: 14 DESC: service not available now, maybe disk full, CL: 0.94 CQ: 0.94 INDEX: 0.94, maybe your broker machine memory too small.
分析:
1.服务现在不可用
2.可能磁盘已满
3.也许代理计算机内存太小
解决:
1.释放磁盘内存
2.将挂载数据存放的目录存放在空间足够的磁盘下