当前位置: 首页 > news >正文

二、使用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模式进行部署

部署列表

组件端口数量
nameserver98761
master10911、109121
rocketmq-console90011

配置文件

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、98772
master-a主节点a10911、109121
slave-1-a主节点a的从节点10921、109221
master-b主节点b10931、109321
slave-1-b主节点b的从节点10941、109421

配置文件

搭建集群模式,需要注意以下配置文件的配置项

  • 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错误码

解决方案:

  1. 使用用户标签:user,将用户指向root
  2. 映射容器存储路径改为:/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&#xff09…...

基于单目的光流法测速

目录 1.简介 2.代码实现 1.简介 基于单目的光流法是一种常见的计算机视觉技术,用于估计图像序列中物体的运动速度。它通过分析连续帧之间的像素变化来推断物体在图像中的移动情况。 背景: 光流法是计算机视觉领域中最早的运动估计方法之一&#xff0c…...

排序-算法

文章目录 一、排序的概念及引用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.为什么要有命名空间我们在使用变量时,通常会为他定义一个名字,在…...

KubeSphere 容器平台高可用:环境搭建与可视化操作指南

Linux_k8s篇 欢迎来到Linux的世界,看笔记好好学多敲多打,每个人都是大神! 题目:KubeSphere 容器平台高可用:环境搭建与可视化操作指南 版本号: 1.0,0 作者: 老王要学习 日期: 2025.06.05 适用环境: Ubuntu22 文档说…...

linux之kylin系统nginx的安装

一、nginx的作用 1.可做高性能的web服务器 直接处理静态资源(HTML/CSS/图片等),响应速度远超传统服务器类似apache支持高并发连接 2.反向代理服务器 隐藏后端服务器IP地址,提高安全性 3.负载均衡服务器 支持多种策略分发流量…...

Linux链表操作全解析

Linux C语言链表深度解析与实战技巧 一、链表基础概念与内核链表优势1.1 为什么使用链表?1.2 Linux 内核链表与用户态链表的区别 二、内核链表结构与宏解析常用宏/函数 三、内核链表的优点四、用户态链表示例五、双向循环链表在内核中的实现优势5.1 插入效率5.2 安全…...

前端倒计时误差!

提示:记录工作中遇到的需求及解决办法 文章目录 前言一、误差从何而来?二、五大解决方案1. 动态校准法(基础版)2. Web Worker 计时3. 服务器时间同步4. Performance API 高精度计时5. 页面可见性API优化三、生产环境最佳实践四、终极解决方案架构前言 前几天听说公司某个项…...

精益数据分析(97/126):邮件营销与用户参与度的关键指标优化指南

精益数据分析(97/126):邮件营销与用户参与度的关键指标优化指南 在数字化营销时代,邮件列表效度、用户参与度和网站性能等指标往往决定着创业公司的增长成败。今天,我们将深入解析邮件打开率、网站可用性、页面参与时…...

现有的 Redis 分布式锁库(如 Redisson)提供了哪些便利?

现有的 Redis 分布式锁库(如 Redisson)相比于开发者自己基于 Redis 命令(如 SETNX, EXPIRE, DEL)手动实现分布式锁,提供了巨大的便利性和健壮性。主要体现在以下几个方面: 原子性保证 (Atomicity)&#xff…...

【网络安全】开源系统getshell漏洞挖掘

审计过程: 在入口文件admin/index.php中: 用户可以通过m,c,a等参数控制加载的文件和方法,在app/system/entrance.php中存在重点代码: 当M_TYPE system并且M_MODULE include时,会设置常量PATH_OWN_FILE为PATH_APP.M_T…...

【Linux系统】Linux环境变量:系统配置的隐形指挥官

。# Linux系列 文章目录 前言一、环境变量的概念二、常见的环境变量三、环境变量特点及其相关指令3.1 环境变量的全局性3.2、环境变量的生命周期 四、环境变量的组织方式五、C语言对环境变量的操作5.1 设置环境变量:setenv5.2 删除环境变量:unsetenv5.3 遍历所有环境…...

探索Selenium:自动化测试的神奇钥匙

目录 一、Selenium 是什么1.1 定义与概念1.2 发展历程1.3 功能概述 二、Selenium 工作原理剖析2.1 架构组成2.2 工作流程2.3 通信机制 三、Selenium 的优势3.1 跨浏览器与平台支持3.2 丰富的语言支持3.3 强大的社区支持 四、Selenium 的应用场景4.1 Web 应用自动化测试4.2 数据…...

日常一水C

多态 言简意赅:就是一个对象面对同一事件时做出的不同反应 而之前的继承中说过,当子类和父类的函数名相同时,会隐藏父类的同名函数转而调用子类的同名函数,如果要调用父类的同名函数,那么就需要对父类进行引用&#…...