二、使用DockerCompose部署RocketMQ
使用DockerCompose进行部署
docker-compose的版本为 Docker Compose version v2.2.3
RocketMQ的部署方式以及各自的特点
-
单master模式
只有一个 master 节点,如果master节点挂掉了,会导致整个服务不可用,线上不宜使用,适合个人学习使用。
-
多master模式
和kafka不一样,RocketMQ中并没有 master 选举功能,在RocketMQ集群中,1台机器只能要么是Master,要么是Slave,这个在初始的机器配置里面,就定死了的。
不会像kafka那样存在master动态选举,所以通过配置多个master节点来保证RocketMQ的高可用。
多个 master 节点组成集群,单个 master 节点宕机或者重启对应用没有影响。
**优点:**高可用,所有模式中性能最高
**缺点:**可能会有少量消息丢失(配置相关),单台机器重启或宕机期间,该机器下未被消费的消息在机器恢复前不可订阅,影响消息实时性
**注意:**使用同步刷盘可以保证消息不丢失,同时 Topic 相对应的 queue 应该分布在集群中各个 master节点,而不是只在某各 master 节点上,否则,该节点宕机会对订阅该 topic 的应用造成影响。
-
多master多slave异步复制模式
在多 master 模式的基础上,每个 master 节点都有至少一个对应的 slave。
master 节点可读可写,但是 slave 只能读不能写,类似于 mysql 的主备模式。
优点: 在 master 宕机时,消费者可以从 slave 读取消息,消息的实时性不会受影响,性能几乎和多 master 一样。
**缺点:**使用异步复制的同步方式有可能会有消息丢失的问题。
-
多master多slave 同步复制模式
同多 master 多 slave 异步复制模式类似,区别在于 master 和 slave 之间的数据同步方式。
**优点:**同步双写的同步模式能保证数据不丢失。
**缺点:**发送单个消息 RT 会略长,性能相比异步复制低10%左右。
**刷盘策略:**同步刷盘和异步刷盘(指的是节点自身数据是同步还是异步存储)
注意:要保证数据可靠,需采用同步刷盘和同步双写的方式,但性能会较其他方式低。
单Master模式进行部署
部署列表
| 组件 | 端口 | 数量 |
|---|---|---|
| nameserver | 9876 | 1 |
| master | 10911、10912 | 1 |
| rocketmq-console | 9001 | 1 |
配置文件
broker.conf
brokerClusterName = rocketmq-cluster
brokerName = broker-strand
brokerId = 0
#当前 broker 监听的 IP,broker所在宿主机的IP
brokerIP1 = 172.16.15.220
#一天删除一次文件的操作,代表凌晨四点进行删除
deleteWhen = 04
#在磁盘上保存消息的时长 48小时
fileReservedTime = 48
# 当前broker所处的角色
brokerRole = ASYNC_MASTER
# 磁盘的刷新方式
flushDiskType = ASYNC_FLUSH
# namesrvAddr的地址
namesrvAddr = 172.16.15.220:9876
autoCreateTopicEnable = true
#接受客户端连接的监听端⼝,要跟后面docker-compose.yml中的ports配置匹配
listenPort = 10911#haListenPort
#haListenPort是haService中使用
#默认值为:listenPort + 1
DockerCompose部署文件
version: '3.5'
services:nameserver-stand:image: apacherocketmq/rocketmq:4.6.0container_name: nameserver-standports: - 9876:9876environment:TZ: Asia/ShanghaiJAVA_OPTS: "-Duser.home=/opt"JAVA_OPT_EXT: "-server -Xms128m -Xmx256m" volumes:- ./nameserver/logs:/home/rocketmq/logs- ./nameserver/store:/home/rocketmq/storecommand: sh mqnamesrvnetworks:rmq:aliases:- nameserverbroker-stand:image: apacherocketmq/rocketmq:4.6.0container_name: broker-standuser:root:rootports:- 10911:10911- 10912:10912depends_on:- nameserveravolumes:- ./broker/logs:/root/logs- ./broker/store:/root/store- ./broker/conf/broker.conf:/opt/rocketmq-4.6.0/conf/broker.confenvironment:TZ: Asia/ShanghaiNAMESRV_ADDR: "nameserver:9876"JAVA_OPTS: "-Duser.home=/opt"JAVA_OPT_EXT: "-server -Xms128m -Xmx256m" command: sh mqbroker -c /opt/rocketmq-4.6.0/conf/broker.conf autoCreateTopicEnable=true &links:- nameserver:nameservernetworks:rmq:aliases:- rmqbrokerrmqconsole-stand:image: styletang/rocketmq-console-ngcontainer_name: rmqconsole-standports:- 9001:9001environment:TZ: Asia/ShanghaiJAVA_OPTS: "-Duser.home=/opt"JAVA_OPT_EXT: "-server -Xms128m -Xmx256m" environment:JAVA_OPTS: "-Drocketmq.namesrv.addr=172.16.15.220:9876 -Dcom.rocketmq.sendMessageWithVIPChannel=false -Dserver.port=9001" networks:rmq:aliases:- rmqconsole
networks:rmq:name: rmqdriver: bridge
多Master多Slave的Async形式部署
部署列表
| 组件 | 角色 | 端口 | 个数 |
|---|---|---|---|
| nameserver | 注册中心 | 9876、9877 | 2 |
| master-a | 主节点a | 10911、10912 | 1 |
| slave-1-a | 主节点a的从节点 | 10921、10922 | 1 |
| master-b | 主节点b | 10931、10932 | 1 |
| slave-1-b | 主节点b的从节点 | 10941、10942 | 1 |
配置文件
搭建集群模式,需要注意以下配置文件的配置项
brokerName:将各个master进行区分,名称一样的master和slave归属一类
brokerId:master与slave区分,为0代表master,>0代表slave
brokerRole:代表master与slave之间的数据传输方式,以及定位该broker是否为slave
ASYNC_MASTER 异步复制;SYNC_MASTER 同步复制;从节点必须配置为SLAVE
-
master-a.conf
brokerClusterName = rocketmq-cluster brokerName = broker-a brokerId = 0 #当前 broker 监听的 IP,broker所在宿主机的IP brokerIP1 = 172.16.15.220 deleteWhen = 04 fileReservedTime = 48 # 控制master与slave的通信模式,ASYNC_MASTER 异步复制;SYNC_MASTER 同步复制;SLAVE 表示从节点 brokerRole = ASYNC_MASTER flushDiskType = ASYNC_FLUSH #namesrvAddr的地址 namesrvAddr = 172.16.15.220:9876;172.16.15.220:9877 autoCreateTopicEnable = true #接受客户端连接的监听端⼝,要跟后面docker-compose.yml中的ports配置匹配 listenPort = 10911#haListenPort #haListenPort是haService中使用 #默认值为:listenPort + 1 -
slave-1-a.conf
brokerClusterName = rocketmq-cluster brokerName = broker-a brokerId = 1 #当前 broker 监听的 IP,broker所在宿主机的IP brokerIP1 = 172.16.15.220 deleteWhen = 04 fileReservedTime = 48 brokerRole = SLAVE flushDiskType = ASYNC_FLUSH #namesrvAddr的地址 namesrvAddr = 172.16.15.220:9876;172.16.15.220:9877 autoCreateTopicEnable = true #接受客户端连接的监听端⼝,要跟后面docker-compose.yml中的ports配置匹配 listenPort = 10921#haListenPort #haListenPort是haService中使用 #默认值为:listenPort + 1 -
master-b.conf
brokerClusterName = rocketmq-cluster brokerName = broker-b brokerId = 0 #当前 broker 监听的 IP,broker所在宿主机的IP brokerIP1 = 172.16.15.220 deleteWhen = 04 fileReservedTime = 48 # 控制master与slave的通信模式,ASYNC_MASTER 异步复制;SYNC_MASTER 同步复制;SLAVE 表示从节点 brokerRole = ASYNC_MASTER flushDiskType = ASYNC_FLUSH #namesrvAddr的地址 namesrvAddr = 172.16.15.220:9876;172.16.15.220:9877 autoCreateTopicEnable = true #接受客户端连接的监听端⼝,要跟后面docker-compose.yml中的ports配置匹配 listenPort = 10931#haListenPort #haListenPort是haService中使用 #默认值为:listenPort + 1 -
slave-1-b.conf
brokerClusterName = rocketmq-cluster brokerName = broker-b brokerId = 1 #当前 broker 监听的 IP,broker所在宿主机的IP brokerIP1 = 172.16.15.220 deleteWhen = 04 fileReservedTime = 48 brokerRole = SLAVE flushDiskType = ASYNC_FLUSH #namesrvAddr的地址 namesrvAddr = 172.16.15.220:9876;172.16.15.220:9877 autoCreateTopicEnable = true #接受客户端连接的监听端⼝,要跟后面docker-compose.yml中的ports配置匹配 listenPort = 10941#haListenPort #haListenPort是haService中使用 #默认值为:listenPort + 1
DockerCompose部署文件参考
version: '3.5'
services:nameserver-a:image: apacherocketmq/rocketmq:4.6.0container_name: nameserver-aports: - 9876:9876environment:TZ: Asia/ShanghaiJAVA_OPTS: "-Duser.home=/opt"JAVA_OPT_EXT: "-server -Xms128m -Xmx256m" volumes:- ./nameserver-a/logs:/home/rocketmq/logs- ./nameserver-a/store:/home/rocketmq/storecommand: sh mqnamesrvnetworks:rmq-cluster:aliases:- nameserver-anameserver-b:image: apacherocketmq/rocketmq:4.6.0container_name: nameserver-bports: - 9877:9876volumes:- ./nameserver-b/logs:/home/rocketmq/logs- ./nameserver-b/store:/home/rocketmq/storecommand: sh mqnamesrvenvironment:TZ: Asia/ShanghaiJAVA_OPTS: "-Duser.home=/opt"JAVA_OPT_EXT: "-server -Xms128m -Xmx256m" networks:rmq-cluster:aliases:- nameserver-abroker-a:image: apacherocketmq/rocketmq:4.6.0container_name: broker-auser:root:rootports:- 10911:10911- 10912:10912volumes:- ./broker-a/logs:/root/logs- ./broker-a/store:/root/store- ./broker-a/conf/broker-a.conf:/opt/rocketmq-4.6.0/conf/broker.confenvironment:TZ: Asia/ShanghaiNAMESRV_ADDR: "nameserver-a:9876;nameserver-b:9876"JAVA_OPTS: "-Duser.home=/opt"JAVA_OPT_EXT: "-server -Xms128m -Xmx256m" command: sh mqbroker -c /opt/rocketmq-4.6.0/conf/broker.conf autoCreateTopicEnable=true &links:- nameserver-a:nameserver-a- nameserver-b:nameserver-bnetworks:rmq-cluster:aliases:- broker-aslave-1-a:image: apacherocketmq/rocketmq:4.6.0container_name: slave-1-auser:root:rootports:- 10921:10921- 10922:10922volumes:- ./slave-1-a/logs:/root/logs- ./slave-1-a/store:/root/store- ./slave-1-a/conf/slave-1-a.conf:/opt/rocketmq-4.6.0/conf/broker.confenvironment:TZ: Asia/ShanghaiNAMESRV_ADDR: "nameserver-a:9876;nameserver-b:9876"JAVA_OPTS: "-Duser.home=/opt"JAVA_OPT_EXT: "-server -Xms128m -Xmx256m" command: sh mqbroker -c /opt/rocketmq-4.6.0/conf/broker.conf autoCreateTopicEnable=true &links:- nameserver-a:nameserver-a- nameserver-b:nameserver-bnetworks:rmq-cluster:aliases:- slave-1-abroker-b:image: apacherocketmq/rocketmq:4.6.0container_name: broker-buser:root:rootports:- 10931:10931- 10932:10932volumes:- ./broker-b/logs:/root/logs- ./broker-b/store:/root/store- ./broker-b/conf/broker-b.conf:/opt/rocketmq-4.6.0/conf/broker.confenvironment:TZ: Asia/ShanghaiNAMESRV_ADDR: "nameserver-a:9876;nameserver-b:9876"JAVA_OPTS: "-Duser.home=/opt"JAVA_OPT_EXT: "-server -Xms256m -Xmx512m -Xmn128m"command: sh mqbroker -c /opt/rocketmq-4.6.0/conf/broker.conf autoCreateTopicEnable=true &links: - nameserver-a:nameserver-a- nameserver-b:nameserver-bnetworks:rmq-cluster:aliases:- broker-bslave-1-b:image: apacherocketmq/rocketmq:4.6.0container_name: slave-1-buser:root:rootports:- 10941:10941- 10942:10942volumes:- ./slave-1-b/logs:/root/logs- ./slave-1-b/store:/root/store- ./slave-1-b/conf/slave-1-b.conf:/opt/rocketmq-4.6.0/conf/broker.confenvironment:TZ: Asia/ShanghaiNAMESRV_ADDR: "nameserver-a:9876;nameserver-b:9876"JAVA_OPTS: "-Duser.home=/opt"JAVA_OPT_EXT: "-server -Xms256m -Xmx512m -Xmn128m"command: sh mqbroker -c /opt/rocketmq-4.6.0/conf/broker.conf autoCreateTopicEnable=true &links: - nameserver-a:nameserver-a- nameserver-b:nameserver-bnetworks:rmq-cluster:aliases:- slave-1-brmqconsole:image: styletang/rocketmq-console-ngcontainer_name: rmqconsoleports:- 9001:9001environment:TZ: Asia/ShanghaiJAVA_OPTS: "-Duser.home=/opt"JAVA_OPT_EXT: "-server -Xms128m -Xmx256m" environment:JAVA_OPTS: "-Drocketmq.namesrv.addr=172.16.15.220:9876;172.16.15.220:9877 -Dcom.rocketmq.sendMessageWithVIPChannel=false -Dserver.port=9001" networks:rmq-cluster:aliases:- rmqconsole
networks:rmq-cluster:name: rmq-clusterdriver: bridge
部署问题
使用docker部署broker时,启动失败报:253错误码
解决方案:
- 使用用户标签:user,将用户指向root
- 映射容器存储路径改为:/root/store
相关文章:
二、使用DockerCompose部署RocketMQ
使用DockerCompose进行部署 docker-compose的版本为 Docker Compose version v2.2.3 RocketMQ的部署方式以及各自的特点 单master模式 只有一个 master 节点,如果master节点挂掉了,会导致整个服务不可用,线上不宜使用,适合个人学习…...
论文笔记[156]PARAFAC. tutorial and applications
原文下载:https://www.sciencedirect.com/science/article/abs/pii/S0169743997000324 摘要 本文介绍了PARAFAC的多维分解方法及其在化学计量学中的应用。PARAFAC是PCA对高阶数组的推广,但该方法的一些特性与普通的二维情况截然不同。例如,…...
AKKA.Net 的使用 来自CHATGPT
请用C# 语言实现一个自动化设备 流水线调度模型,流水线各个环节需要并行执行: 下面是一个使用C#语言实现自动化设备流水线调度模型的简单示例。该示例使用并发编程库System.Threading.Tasks来实现流水线各个环节的并行执行。 csharp using System; usi…...
网络安全—小白学习笔记
1.网络安全是什么 网络安全可以基于攻击和防御视角来分类,我们经常听到的 “红队”、“渗透测试” 等就是研究攻击技术,而“蓝队”、“安全运营”、“安全运维”则研究防御技术。 2.网络安全市场 一、是市场需求量高; 二、则是发展相对成熟入…...
OpenRemote: Java 开源 IoT 物联网开发平台,匹配智慧城市、智能家居、能源管理
OpenRemote 是一个直观、用户友好的基于Java语言的开源 IoT 物联网设备管理平台,它包括从连接设备到构建应用程序和特定领域的智能应用程序的所有功能和特性。通过OpenRemote物联网平台,用户可以收集和处理来自不同设备的传感器数据,适用于智…...
GO-unioffice实现word编辑
导包 import ("fmt""log""os""time""github.com/unidoc/unioffice/common/license""github.com/unidoc/unioffice/document" ) 创建word文件 func CreateFile(name string) {filename : name ".docx&quo…...
SpringMVC的拦截器(Interceptor)
拦截器简介 SpringMVC的拦截器Interceptor,主要是对Controller资源访问时进行拦截的基本操作的技术,当然拦截后可以进行权限控制,功能增强等都是可以的。拦截器类似于JavaWeb开发中的Filter,他们之间的区别如下图所示 Filter技术…...
【git】gitlab常用命令
gitlab官网 官网:官网 中文官网:中文官网 默认的gitlab安装目录 /opt/gitlab/bin 启动 gitlab-ctl start 查看状态 gitlab-ctl status 停止 gitlab-ctl stop 重启GitLab gitlab-ctl restart 查看gitlab的配置文件 配置的路径是:/…...
解读下SWD协议以及其应用
SWD协议原理 SWD(Serial Wire Debug)协议是一种用于ARM Cortex微控制器的调试接口协议。它定义了主机计算机与目标设备之间通过SWD线进行通信的格式和规范。 SWD协议使用两根线进行通信:SWDIO(Serial Wire Debug I/O)…...
基于单目的光流法测速
目录 1.简介 2.代码实现 1.简介 基于单目的光流法是一种常见的计算机视觉技术,用于估计图像序列中物体的运动速度。它通过分析连续帧之间的像素变化来推断物体在图像中的移动情况。 背景: 光流法是计算机视觉领域中最早的运动估计方法之一,…...
排序-算法
文章目录 一、排序的概念及引用1.1 排序概念1.2 排序运用1.3 常见排序算法 二、常见排序算法的实现2.1 插入排序2.1.1 基本思想2.1.2 直接插入排序2.1.3 希尔排序 2.2 选择排序2.2.1 基本思想2.2.2 直接选择排序2.2.3 堆排序 2.3 交换排序2.3.1 冒泡排序2.3.2 快速排序2.3.3 快…...
【特纳斯电子】基于单片机的火灾监测报警系统-实物设计
视频及资料链接:基于单片机的火灾监测报警系统-实物设计 - 电子校园网 (mcude.com) 编号: T0152203M-SW 设计简介: 本设计是基于单片机的火灾监测报警系统,主要实现以下功能: 1.通过OLED显示温度、烟雾、是否有火…...
网络安全就业形势怎么样?
泻药,以下都是我本人的肺腑之言,是答主深耕职场多年,转战数家公司总结周围朋友的从业经验才总结出来的行业真相,真心希望帮助到还没有步入职场的大家,尤其是24届的应届毕业生,多掌握些就业信息就能少走一些…...
【Golang】Go的并发和并行性解释。谁说Go不是并行语言?
偶然发现百度上有很多"师出同门"的"go是并发语言,而不是并行语言"的说法。让我顿感奇怪,"并行"说白了就是对CPU多核的利用,这年头不能利用多核的编译语言还有的混?而且还混的这么好?并且…...
k8s-16 k8s调度
调度器通过 kubernetes 的 watch 机制来发现集群中新创建且尚未被调度到 Node上的 Pod。调度器会将发现的每一个未调度的 Pod 调度到一个合适的 Node 上来运行。 kube-scheduler 是 Kubernetes 集群的默认调度器,并且是集群控制面的一部分如果你真的希望或者有这方面…...
【2023研电赛】全国技术竞赛一等奖:基于FPGA的超低时延激光多媒体终端
该作品参与极术社区组织的研电赛作品征集活动,欢迎同学们投稿,获取作品传播推广,并有丰富礼品哦~ 基于FPGA的超低时延激光多媒体终端 参赛单位:华东师范大学 指导老师:刁盛锡 参赛队员:王泽宇 谢祖炜 秦子淇…...
Annoy vs Milvus:哪个向量数据库更适合您的AI应用?知其然知其所以然
1. Annoy vs Milvus简介 Annoy 和 Milvus 都是用于向量索引和相似度搜索的开源库,它们可以高效地处理大规模的向量数据。 Annoy(Approximate Nearest Neighbors Oh Yeah): Annoy 是一种近似最近邻搜索算法,它通过构…...
android 13.0 SystemUI导航栏添加虚拟按键功能(一)
1.概述 在13.0的系统产品开发中,在系统SystemUI的原生系统中默认只有三键导航,想添加其他虚拟按键就需要先在构建导航栏的相关布局中分析结构,然后添加相关的图标xml就可以了,然后添加对应的点击事件,就可以了,接下来先分析第一步关于导航栏的相关布局情况 然后实现功能 …...
内存管理-分页、虚拟地址、虚拟内容、页面置换算法
文章目录 一、5W2H角度分析内存管理What是内存管理Why需要内存管理Who使用内存管理Where内存管理应用When需要内存管理How内存管理工作How much内存管理的成本 二、分页什么是分页分页的原理分页的优缺点分页的应用 三、虚拟地址什么是虚拟地址虚拟地址的作用虚拟地址的转换虚拟…...
【C++入门】命名空间详解(从零开始,冲击蓝桥杯)
C入门 命名空间 南喵小鸡汤程序员可以让步,却不可以退缩,可以羞涩,却不可以软弱,总之,程序员必须是勇敢的。一 . 命名空间的介绍二.命名空间的实际应用1.为什么要有命名空间我们在使用变量时,通常会为他定义一个名字,在…...
龙虎榜——20250610
上证指数放量收阴线,个股多数下跌,盘中受消息影响大幅波动。 深证指数放量收阴线形成顶分型,指数短线有调整的需求,大概需要一两天。 2025年6月10日龙虎榜行业方向分析 1. 金融科技 代表标的:御银股份、雄帝科技 驱动…...
rknn优化教程(二)
文章目录 1. 前述2. 三方库的封装2.1 xrepo中的库2.2 xrepo之外的库2.2.1 opencv2.2.2 rknnrt2.2.3 spdlog 3. rknn_engine库 1. 前述 OK,开始写第二篇的内容了。这篇博客主要能写一下: 如何给一些三方库按照xmake方式进行封装,供调用如何按…...
PHP和Node.js哪个更爽?
先说结论,rust完胜。 php:laravel,swoole,webman,最开始在苏宁的时候写了几年php,当时觉得php真的是世界上最好的语言,因为当初活在舒适圈里,不愿意跳出来,就好比当初活在…...
Docker 运行 Kafka 带 SASL 认证教程
Docker 运行 Kafka 带 SASL 认证教程 Docker 运行 Kafka 带 SASL 认证教程一、说明二、环境准备三、编写 Docker Compose 和 jaas文件docker-compose.yml代码说明:server_jaas.conf 四、启动服务五、验证服务六、连接kafka服务七、总结 Docker 运行 Kafka 带 SASL 认…...
无法与IP建立连接,未能下载VSCode服务器
如题,在远程连接服务器的时候突然遇到了这个提示。 查阅了一圈,发现是VSCode版本自动更新惹的祸!!! 在VSCode的帮助->关于这里发现前几天VSCode自动更新了,我的版本号变成了1.100.3 才导致了远程连接出…...
visual studio 2022更改主题为深色
visual studio 2022更改主题为深色 点击visual studio 上方的 工具-> 选项 在选项窗口中,选择 环境 -> 常规 ,将其中的颜色主题改成深色 点击确定,更改完成...
将对透视变换后的图像使用Otsu进行阈值化,来分离黑色和白色像素。这句话中的Otsu是什么意思?
Otsu 是一种自动阈值化方法,用于将图像分割为前景和背景。它通过最小化图像的类内方差或等价地最大化类间方差来选择最佳阈值。这种方法特别适用于图像的二值化处理,能够自动确定一个阈值,将图像中的像素分为黑色和白色两类。 Otsu 方法的原…...
Axios请求超时重发机制
Axios 超时重新请求实现方案 在 Axios 中实现超时重新请求可以通过以下几种方式: 1. 使用拦截器实现自动重试 import axios from axios;// 创建axios实例 const instance axios.create();// 设置超时时间 instance.defaults.timeout 5000;// 最大重试次数 cons…...
多模态图像修复系统:基于深度学习的图片修复实现
多模态图像修复系统:基于深度学习的图片修复实现 1. 系统概述 本系统使用多模态大模型(Stable Diffusion Inpainting)实现图像修复功能,结合文本描述和图片输入,对指定区域进行内容修复。系统包含完整的数据处理、模型训练、推理部署流程。 import torch import numpy …...
Java求职者面试指南:Spring、Spring Boot、Spring MVC与MyBatis技术解析
Java求职者面试指南:Spring、Spring Boot、Spring MVC与MyBatis技术解析 一、第一轮基础概念问题 1. Spring框架的核心容器是什么?它的作用是什么? Spring框架的核心容器是IoC(控制反转)容器。它的主要作用是管理对…...
