RocketMQ无损扩容实战

news2024/11/25 10:28:30

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

背景

假设目前我们的线上部署的RocketMQ部署的是一主一从,现在随着业务的发展,或者是我们需要做一些促销活动,会有突发流量高峰,现有的一主一从无法满足我们的性能,服务器的内存和cpu占用已经高达70-90%左右,所以我们需要对线上的RocketMQ集群进行无损扩容(不影响业务正常使用)

扩容

原有的一主一从的配置

broker-a-n0

brokerClusterName = xiaozou
brokerName = broker-a
brokerId = -1
brokerRole = SLAVE
deleteWhen = 04
fileReservedTime = 48
enableControllerMode = true

fetchNamesrvAddrByAddressServer = true
fetchControllerAddrByDnsLookup = true
# 虚拟的,线上填写自己真实地址(dns服务发现使用域名)
controllerAddr = weihubeats-mq-controller.com:9878
allAckInSyncStateSet=true
listenPort=30911

storePathRootDir=/Users/weihubeats/Desktop/sofe/rocketmq-file/rmqstore/node00/store

autoCreateTopicEnable=false
autoCreateSubscriptionGroup=false
enablePropertyFilter=true
slaveReadEnable=true
waitTimeMillsInSendQueue=1000

broker-a-n1

brokerClusterName = xiaozou
brokerName = broker-a
brokerId = -1
brokerRole = SLAVE
deleteWhen = 04
fileReservedTime = 48
enableControllerMode = true

fetchNamesrvAddrByAddressServer = true
fetchControllerAddrByDnsLookup = true
# 虚拟的,线上填写自己真实地址(dns服务发现使用域名)
controllerAddr = weihubeats-mq-controller.com:9878
allAckInSyncStateSet=true
listenPort=30911

storePathRootDir=/Users/weihubeats/Desktop/sofe/rocketmq-file/rmqstore/node01/store

autoCreateTopicEnable=false
autoCreateSubscriptionGroup=false
enablePropertyFilter=true
slaveReadEnable=true
waitTimeMillsInSendQueue=1000

可以看到broker-a-n0broker-a-n1配置并没有什么太大区别。

现在我们要进行无损扩容了,我们需要新增一主一从,即broker-b-n0broker-a-n1

新主从配置

我们这里先给出新的主从的配置

broker-a-n0

brokerClusterName = xiaozou
brokerName = broker-b
brokerId = -1
brokerRole = SLAVE
deleteWhen = 04
fileReservedTime = 48
enableControllerMode = true

fetchNamesrvAddrByAddressServer = true
fetchControllerAddrByDnsLookup = true
# 虚拟的,线上填写自己真实地址(dns服务发现使用域名)
controllerAddr = weihubeats-mq-controller.com:9878
allAckInSyncStateSet=true
listenPort=30911

storePathRootDir=/Users/weihubeats/Desktop/sofe/rocketmq-file/rmqstore/node00/store

autoCreateTopicEnable=false
autoCreateSubscriptionGroup=false
enablePropertyFilter=true
slaveReadEnable=true
waitTimeMillsInSendQueue=1000

broker-a-n1

brokerClusterName = xiaozou
brokerName = broker-b
brokerId = -1
brokerRole = SLAVE
deleteWhen = 04
fileReservedTime = 48
enableControllerMode = true

fetchNamesrvAddrByAddressServer = true
fetchControllerAddrByDnsLookup = true
# 虚拟的,线上填写自己真实地址(dns服务发现使用域名)
controllerAddr = weihubeats-mq-controller.com:9878
allAckInSyncStateSet=true
listenPort=30911

storePathRootDir=/Users/weihubeats/Desktop/sofe/rocketmq-file/rmqstore/node01/store

autoCreateTopicEnable=false
autoCreateSubscriptionGroup=false
enablePropertyFilter=true
slaveReadEnable=true
waitTimeMillsInSendQueue=1000

可以看到新的主从配置与原先的broker-a-n0没有太大的区别,唯一的不同就是brokerClusterName不同

copy原有的配置文件

需要注意新主节点如果不copy原有集群的topics.json配置和subscriptionGroup.json会导致原有集群上的topic和subscriptionGroup在新的扩容集群不生效,需要手动去创建

如果查看老的topic会发现在新的集群是没有的,所以我们需要把旧集群的这两个配置topics.jsonsubscriptionGroup.json复制到我们新集群的配置文件夹里面,即我们配置的storePathRootDir
storePathRootDir + /config

然后按照我们原先的启动集群方式启动新的集群即可

我这里可以看到broker-d已经有消息消费了

验证方式

如果想要验证很简单,本地启动一个product一直发送消息

然后看到扩容的broker启动,看看有没有消息发送到这个broker即可完成验证

一个小细节

我们在复制的topic.json中有一个系统topic比如我们的集群是broker-a
那么会有这么一个topic


"broker-a":{
			"attributes":{},
			"order":false,
			"perm":7,
			"readQueueNums":1,
			"topicFilterType":"SINGLE_TAG",
			"topicName":"broker-a",
			"topicSysFlag":0,
			"writeQueueNums":1
		}

这种topic复制到新的扩容集群我们需要手动修改为broker-b吗,实际是不需要的,系统会自动创建该topic

总结

总的来说整体操作难度不大,但是如果认为的去扩容在线上遇到紧急流量我们可能操作不过来,所以可以考虑使用快照的方式扩容这样库容会更快

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/765094.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【unity细节】为什么发射炮弹实例化出来了却无法移动

👨‍💻个人主页:元宇宙-秩沅 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 本文由 秩沅 原创 收录于专栏:unity细节和bug ⭐为什么发射炮弹实例化出来了却无法移动⭐ 文章目录 ⭐为什么发射炮弹实例化出来…

JS高级进阶

JavaScript 进阶 - 第1节 学习作用域、变量提升、闭包等语言特征,加深对 JavaScript 的理解,掌握变量赋值、函数声明的简洁语法,降低代码的冗余度。 理解作用域对程序执行的影响能够分析程序执行的作用域范围理解闭包本质,利用闭包…

java mybatis

1.框架介绍 为什么使用框架? (1)框架效率高,成本低 (2)框架是别人写好的构建,我们只需学会如何使用它【可维护性高】 (3)框架是基于MVC的思想【web层独有的思想】的拓展而开发的…

DeepC 实用教程(四)分析

目 录 一、前言二、DeepC分析三、新建分析 / New Analysis四、Response Storage五、Static Analysis Options六、Dynamic Analysis Options七、Multiple Analysis八、提交分析/执行分析九、参考文献 一、前言 SESAM (Super Element Structure Analysis Module&#…

【动手学深度学习】GPU初步认识与使用

【动手学深度学习】GPU初步认识与使用 查看显卡 使用nvidia-smi命令来查看显卡信息 pytorch中每一个数组都有一个设备,将其称之为环境,那么默认情况下都是在CPU上,有时候环境是GPU 计算设备 默认情况下,张量是在内存中创建的&a…

Codeforces Round 885 (Div. 2) A题

原题div.2A 很容易看不懂样例4,就是我们以为此题只能走一分钟,但是事实上不是的,这个人可以走无限分钟,我们借助样例2来推演出来ps:可能不是正解,正解可以去看官方题解或者别的题解,但是也大差不差 #inclu…

应用在电磁炉中的常用IGBT管 IHW20N135R5 优势及其特性

应用在电磁炉中的常用IGBT管 IHW20N135R5深力科 在TO-247封装中具有单片集成反向导通二极管的反向导通R5 1350 V,20 A RC-H5 IGBT已针对感应烹饪应用的苛刻要求进行了优化。1350 V RC-H5 IGBT采用单片集成二极管,非常适合软开关应用,如感应烹…

时序预测 | MATLAB实现LSTM时间序列未来多步预测

基本介绍 实际工程中,未来预测是值得研究的课题之一,大部分深度模型在短期预测上表现不错,在中长 期预测上往往欠佳。 本文依然借助LSTM专栏的一些基础预测,探讨未来预测的简单实现方式。 程序设计 直接多步预测 直接多步预测的本…

【分布式应用】Ceph的实战应用

目录 一、创建 CephFS 文件系统 MDS 接口1.1服务端操作1)在管理节点创建 mds 服务2)查看各个节点的 mds 服务3)创建存储池,启用 ceph 文件系统4)查看mds状态,一个up,其余两个待命,目…

【深度学习】张量的广播专题

一、说明 张量广播(tensor broadcasting)是一种将低维张量自动转化为高维张量的技术,使得张量之间可以进行基于元素的运算(如加、减、乘等)。在进行张量广播时,会将维度数较少的张量沿着长度为1的轴进行复制…

数据结构和算法——堆排序(选择排序、思路图解、代码、时间复杂度、堆排序及代码)

目录 选择排序 思路图解 代码&#xff08;C语言&#xff09; 时间复杂度 堆排序 算法1 算法2 堆排序代码 选择排序 思路图解 代码&#xff08;C语言&#xff09; void Selection_Sort(ElementType A[], int N) {for(i 0; i < N; i){MinPosition ScanForMin(A,i,N…

【CSS】 position : static | absolute | relative | fixed | sticky

目录 1️⃣前言2️⃣内容2.1、什么是定位&#xff1f;2.2、为什么需要定位&#xff1f;2.3、如何使用定位&#xff1f;2.3.1、定位的组成2.3.2、static2.3.3、relative2.3.4、absolute2.3.5、fixed2.3.6、sticky 2.4、什么是 z-index &#xff1f;2.5、z-index 属性的取值2.6、…

Docker本地镜像发布到阿里云

我们构建了自己的镜像后&#xff0c;可以发布到远程镜像提供给其他人使用&#xff0c;比如发布到阿里云 使用build/commit生成新的镜像&#xff0c;并生成自己镜像的版本标签tag&#xff0c;此新的镜像在自己的本地库中&#xff0c;使用push可以将镜像提交到阿里云公有库/私有库…

阿里云推出“ModelScopeGPT”大模型调用工具,再添新贵

阿里云近日对外宣布将要推出其首款大模型调用工具——“魔搭GPT&#xff08;ModelScopeGPT&#xff09;”&#xff0c;从而为使用者们提供更为优质的人工智能应用支持。而作为阿里云人工智能产品家族中的新成员&#xff0c;这一创新工具也将进一步扩展阿里云在人工智能领域的影…

对抗网络GAN详解:GAN训练不稳定解决方法、GAN中使用的深度学习技巧、GAN使用任务领域、GAN资料大全整理

不建议用博弈论思想 (game theory) 去理解对抗网络&#xff0c;减弱生成器 G 与判别器 D 间的对抗属性有利于稳定训练。不要把判别器理解成一个分类器 (Discriminator, Classifier)&#xff0c;让判别器回归判别属性&#xff0c;像 Critic 那样输出一个评分。这样能让判别器为生…

总结SPI、I2C、UART三者的区别以及有关知识

SPI&#xff08;串行外设接口&#xff09;&#xff0c;I2C&#xff08;串行总线接口&#xff09;和UART&#xff08;通用异步收发器&#xff09;是三种常用的通信协议&#xff0c;用于在不同的设备之间进行数据传输。 目录 三者的区别&#xff1a; 单工&#xff0c;半双工&am…

windows10 搭建hadoop环境,并且使用hadoop命令

hadoop 环境创建 1. 八、window搭建spark IDEA开发环境 按照步骤安装完 2. windows下安装和配置hadoop 配置环境变量&#xff0c;注意JAVA_HOME路径&#xff0c;修改后&#xff0c;重启电脑&#xff0c;不重启容易报错&#xff01;&#xff01;&#xff01; ​ 新建dat…

Kubernetes - kubeadm部署

Kubernetes - kubeadm部署 1 环境准备1.1 在各个节点上配置主机名&#xff0c;并配置 Hosts 文件1.2 关闭防护墙&#xff0c;禁用selinux&#xff0c;关闭swap1.3 配置免密登录1.4 配置内核参数1.5 配置br_netfilter 2. 安装K8s2.1 安装docker(各节点)2.2 安装K8s组件(各节点)2…

泛型和Object类的区别

文章目录 使用的时机为什么集合类要是用泛型而不用Object如何将List< Object >aa转成List< User >bb使用泛型的好处&#xff1a;泛型标记符 使用的时机 泛型&#xff1a;如果我确定要用哪个对象&#xff0c;并且使用到这个对象里面的属性&#xff0c;选择用泛型&a…

疯狂数据结构-栈-Java

概念 基本概念解读 当谈到 "栈" 时&#xff0c;它是一种遵循后进先出&#xff08;Last In, First Out&#xff0c;LIFO&#xff09;原则 的有序集合。这意味着最后入栈的元素首先被弹出&#xff0c;而最早入栈的元素最后被弹 出。 在栈中&#xff0c;只能对最上面的…