RocketMQ命令行操作

Rocketmq有带图形界面的控制台,这次公司环境迁移,需要把jl环境的topic及消费组加到另一个Rocketmq集群,如果在web控制台一个个点太费时间了,可以通过命令行批量添加。

场景一

如果是两个Rocketmq集群,先从A集群导出topic及消费组列表,再到B集群批量创建。

比如我们公司是以%前面来区别不同的环境的,A集群是以jl%开头:

获取topic列表

1
./mqadmin topicList -n $NAMESRV_ADDR | grep "^jl%" > jl_topics.txt

获取消费组列表

1
./mqadmin consumerProgress -n $NAMESRV_ADDR | grep "jl%" | awk '{print $1}' | sort | uniq > jl_consumer_groups.txt

把列表传到B集群的机器,然后编写批量创建jltest%开头的脚本:

批量创建topic

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#!/bin/bash

# 设置 RocketMQ 环境
ROCKETMQ_HOME=/home/rocketmq/rocketmq-5.0.0
NAMESRV_ADDR=rocketmqnamesrv:9876


# 读取 jl_topics.txt 中的主题
while IFS= read -r topic; do
# 替换前缀 jl% 为 jltest%
new_topic="${topic/jl%/jltest%}"

echo "创建主题: $new_topic (基于 $topic)"

./mqadmin updateTopic -n $NAMESRV_ADDR -t "$new_topic" -c DefaultCluster -r 8 -w 8

sleep 0.5
done < jl_topics.txt

echo "all jltest% topic create done"

批量创建消费组

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#!/bin/bash

# 设置 RocketMQ 环境
ROCKETMQ_HOME=/home/rocketmq/rocketmq-5.0.0
NAMESRV_ADDR=rocketmqnamesrv:9876

# 读取 jl_consumer_groups.txt 中的消费者组
while IFS= read -r consumer_group; do
# 替换前缀 jl% 为 jltest%
new_consumer_group="${consumer_group/jl%/jltest%}"

echo "创建消费者组: $new_consumer_group (基于 $consumer_group)"

./mqadmin updateSubGroup -n $NAMESRV_ADDR -c DefaultCluster -d true -g "$new_consumer_group"

sleep 0.5
done < jl_consumer_groups.txt

echo "所有 jltest% 消费者组创建完成"

场景二

如果不是两个集群,而是同一个集群,需要从jl环境创建一份到jltest环境,可以用如下的脚本:

完整脚本

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
#!/bin/bash

# 设置 RocketMQ 环境
ROCKETMQ_HOME=/home/rocketmq/rocketmq-5.0.0
NAMESRV_ADDR=rocketmq-name-server-service.qifu-middleware:9876
cd $ROCKETMQ_HOME/bin

echo "开始获取 jl% 开头的主题..."
./mqadmin topicList -n $NAMESRV_ADDR | grep "^jl%" > jl_topics.txt
echo "找到 $(wc -l < jl_topics.txt) 个 jl% 主题"

echo "开始获取 jl% 开头的消费者组..."
./mqadmin consumerProgress -n $NAMESRV_ADDR | grep "jl%" | awk '{print $1}' | sort | uniq > jl_consumer_groups.txt
echo "找到 $(wc -l < jl_consumer_groups.txt) 个 jl% 消费者组"

echo "开始创建 jltest% 主题..."
while IFS= read -r topic; do
new_topic="${topic/jl%/jltest%}"
echo "创建主题: $new_topic"
./mqadmin updateTopic -n $NAMESRV_ADDR -t "$new_topic" -c DefaultCluster -r 8 -w 8
sleep 0.3
done < jl_topics.txt

echo "开始创建 jltest% 消费者组..."
while IFS= read -r consumer_group; do
new_consumer_group="${consumer_group/jl%/jltest%}"
echo "创建消费者组: $new_consumer_group"
./mqadmin updateSubGroup -n $NAMESRV_ADDR -c DefaultCluster -d true -g "$new_consumer_group"
sleep 0.3
done < jl_consumer_groups.txt

echo "验证创建结果..."
echo "创建的 jltest% 主题:"
./mqadmin topicList -n $NAMESRV_ADDR | grep "^jltest%" | head -10

echo "创建的 jltest% 消费者组:"
./mqadmin consumerProgress -n $NAMESRV_ADDR | grep "jltest%" | awk '{print $1}' | sort | uniq | head -10

echo "批量复制完成!"

详细的Rocket MQ命令参数可参考:15 RocketMQ 常用命令实战

Thank you for your accept. mua!
-------------本文结束感谢您的阅读-------------