RocketMQ如何像德芙那样丝滑缩容

这里是weihubeats ,觉得文章不错可以关注公众号小奏技术,文章首发。拒绝营销号,拒绝标题党

RocketMQ 版本

  • 5.1.0

背景

大促期间为了保证RocketMQ的稳定性,进行了扩容,扩容实战相关的操作博文之前也提到过

可以参考这里 RocketMQ无损扩容实战:weihubeats.blog.csdn.net/article/det...

实操

正常的操作流程是如何的呢?

  1. 停写broker
  2. 待broker上面没有消息需要消费后,下线broker

RocketMQ停写之前分析过有两种

  1. 仅更新Nameserve内存中的broker的写入权限,不实际去更新broker的写入权限
  2. 更新broker的写入权限

1这种方式更适合broker升级更新,broker重启重新注册到Nameserve写入权限就会恢复

我们本次要缩容,所以直接更新broker的写入权限即可

broker停写

  1. cd到部署目录
sh 复制代码
cd /home/ubuntu/rocketmq/distribution/target/rocketmq-5.1.0/rocketmq-5.1.0
  1. 执行停写
sh 复制代码
sh bin/mqadmin updateBrokerConfig -b 192.168.1.2:30911 -k brokerPermission -v 4

观察集群流量

less 复制代码
#Cluster Name           #Broker Name            #BID  #Addr                  #Version              #InTPS(LOAD)     #OutTPS(LOAD)  
xiaozoujishu            broker-c                0     192.168.1.11:30911    V5_1_0                 0.00(0,0ms)       1.40(0,0ms) 
xiaozoujishu            broker-c                2     192.168.1.6:30911     V5_1_0                 0.00(0,0ms)       0.00(0,0ms) 
xiaozoujishu            broker-d                0     192.168.1.4:30911     V5_1_0              xxxx.76(0,0ms)    xxxx.33(0,0ms)
xiaozoujishu            broker-d                1     192.168.1.3:30911     V5_1_0              xxxx.76(0,0ms)       0.00(0,0ms) 
xiaozoujishu            broker-e                0     192.168.1.8:30911     V5_1_0              xxxx.27(0,0ms)    xxxx.11(0,0ms) 
xiaozoujishu            broker-e                2     192.168.1.2:30911     V5_1_0              xxxx.85(0,0ms)       0.00(0,0ms) 
xiaozoujishu            broker-f                0     192.168.1.9:30911     V5_1_0              xxxx.76(0,0ms)    xxxx.33(0,0ms)  
xiaozoujishu            broker-f                2     192.168.1.1:30911     V5_1_0              xxxx.71(0,0ms)       0.00(0,0ms)

可以看到broker-c集群中的 broker的 InTPS写入流量已经为0了,OutTPS还有少量流量

观察消费者流量

sh 复制代码
sh bin/mqadmin brokerConsumeStats -b 192.168.1.11:30911 -n 192.168.1.22:9876
  • 展示
yaml 复制代码
#Topic                                                            #Group                                                    #Broker Name                      #QID  #Broker Offset        #Consumer Offset      #Diff                 #LastTime
%RETRY%GID_INFO_xiaozou                                            GID_INFO_xiaozou                                         broker-c                          0     12614511              12614511             0                      2023-12-11 21:42:17
xiaozou                                                            GID_INFO_xiaozou                                         broker-c                          0     321996960             321996960             0                     2023-12-11 21:42:19
xiaozou                                                            GID_INFO_xiaozou                                         broker-c                          1     482991618             482991618             0                     2023-12-11 21:42:18
xiaozou                                                            GID_INFO_xiaozou                                         broker-c                          2     483209653             483209653             0                     2023-12-11 21:42:19
xiaozou                                                            GID_INFO_xiaozou                                         broker-c                          3     482440511             482440511             0                     2023-12-11 21:42:17
xiaozou                                                            GID_INFO_xiaozou                                         broker-c                          4     486478174             486478174             0                     2023-12-11 21:42:18
xiaozou                                                            GID_INFO_xiaozou                                         broker-c                          5     485433955             485433955             0                     2023-12-11 21:42:19
xiaozou                                                            GID_INFO_xiaozou                                         broker-c                          6     483460016             483460016             0                     2023-12-11 21:42:19
xiaozou                                                            GID_INFO_xiaozou                                         broker-c                          7     882383062             882383062             0                     2023-12-11 21:42:17
xiaozou                                                            GID_INFO_xiaozou                                         broker-c                          8     485121973             485121973             0                     2023-12-11 21:42:19
xiaozou                                                            GID_INFO_xiaozou                                         broker-c                          9     781475152             781475152             0                     2023-12-11 21:42:17
xiaozou                                                            GID_INFO_xiaozou                                         broker-c                          10    585496105             585496105             0                     2023-12-11 21:42:17

正常刚停写是还会有一些消息待消费的,就是diff不为0.我这里是停写很久了,所以所有消息都消费完了

我们等到所有的diff都为0,代表没有消息需要消费了。

这个时候就可以停掉broker

停止broker

待没有滞留消息后我们直接kill broker即可。这里推荐先kill掉slave broker,然后再kill slave broker 不要使用kill -9

停止完成后即可回收我们的机器了

总结

总的来说缩容还是比较简单的,就是broker停写,然后等broker上面的消息都消费完成后即可下线。

下线的时候先下线slave,然后是master。避免出现主从自动切换

相关推荐
行百里er26 分钟前
Redis 持久化——RDB 快照 vs AOF 日志
redis·后端
Ysx2 小时前
踩了 5 次"本地全绿、生产失效"之后,我把交付流程做成了 SOP
后端·程序员
pippocao2 小时前
王者荣耀日志组件BqLog为什么这么快之2——从环形队列到自适应数据总线
后端
孟健2 小时前
Stripe出海收款架构设计:水星银行与香港账户实测对比与资金流闭环
后端·架构
程序员cxuan2 小时前
DeepSeek Harness 出了桌面端?我把它扒了一遍
人工智能·后端·程序员
j7~2 小时前
【Python】(篇七)《使用Python库》 -- 详解
开发语言·后端·python·编程学习·python标准库·python第三方库·python拓展
Memory_荒年2 小时前
订单超时未支付?从“定时扫库”一步步到最终形态
java·后端
卷无止境3 小时前
便宜模型和贵模型到底差在哪儿?一份关于Claude与GPT分级体系的深度梳理
后端·python
阿狗童鞋4 小时前
SpringBoot微服务实战指南
spring boot·后端·微服务
FfHUCisI4 小时前
sync.Once 与 sync.Cond 源码与并发控制陷阱
服务器·开发语言·后端·golang