二、使用DockerCompose部署RocketMQ

2023-10-13 10:12

本文主要是介绍二、使用DockerCompose部署RocketMQ,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

使用DockerCompose进行部署

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的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/202502

相关文章

使用@Slf4j注解,log.info()无法使用问题

《使用@Slf4j注解,log.info()无法使用问题》在使用Lombok的@Slf4j注解打印日志时遇到问题,通过降低Lombok版本(从1.18.x降至1.16.10)解决了问题... 目录@Slf4androidj注解,log.info()无法使用问题最后解决总结@Slf4j注解,log.info(

闲置电脑也能活出第二春?鲁大师AiNAS让你动动手指就能轻松部署

对于大多数人而言,在这个“数据爆炸”的时代或多或少都遇到过存储告急的情况,这使得“存储焦虑”不再是个别现象,而将会是随着软件的不断臃肿而越来越普遍的情况。从不少手机厂商都开始将存储上限提升至1TB可以见得,我们似乎正处在互联网信息飞速增长的阶段,对于存储的需求也将会不断扩大。对于苹果用户而言,这一问题愈发严峻,毕竟512GB和1TB版本的iPhone可不是人人都消费得起的,因此成熟的外置存储方案开

中文分词jieba库的使用与实景应用(一)

知识星球:https://articles.zsxq.com/id_fxvgc803qmr2.html 目录 一.定义: 精确模式(默认模式): 全模式: 搜索引擎模式: paddle 模式(基于深度学习的分词模式): 二 自定义词典 三.文本解析   调整词出现的频率 四. 关键词提取 A. 基于TF-IDF算法的关键词提取 B. 基于TextRank算法的关键词提取

使用SecondaryNameNode恢复NameNode的数据

1)需求: NameNode进程挂了并且存储的数据也丢失了,如何恢复NameNode 此种方式恢复的数据可能存在小部分数据的丢失。 2)故障模拟 (1)kill -9 NameNode进程 [lytfly@hadoop102 current]$ kill -9 19886 (2)删除NameNode存储的数据(/opt/module/hadoop-3.1.4/data/tmp/dfs/na

Hadoop数据压缩使用介绍

一、压缩原则 (1)运算密集型的Job,少用压缩 (2)IO密集型的Job,多用压缩 二、压缩算法比较 三、压缩位置选择 四、压缩参数配置 1)为了支持多种压缩/解压缩算法,Hadoop引入了编码/解码器 2)要在Hadoop中启用压缩,可以配置如下参数

Makefile简明使用教程

文章目录 规则makefile文件的基本语法:加在命令前的特殊符号:.PHONY伪目标: Makefilev1 直观写法v2 加上中间过程v3 伪目标v4 变量 make 选项-f-n-C Make 是一种流行的构建工具,常用于将源代码转换成可执行文件或者其他形式的输出文件(如库文件、文档等)。Make 可以自动化地执行编译、链接等一系列操作。 规则 makefile文件

字节面试 | 如何测试RocketMQ、RocketMQ?

字节面试:RocketMQ是怎么测试的呢? 答: 首先保证消息的消费正确、设计逆向用例,在验证消息内容为空等情况时的消费正确性; 推送大批量MQ,通过Admin控制台查看MQ消费的情况,是否出现消费假死、TPS是否正常等等问题。(上述都是临场发挥,但是RocketMQ真正的测试点,还真的需要探讨) 01 先了解RocketMQ 作为测试也是要简单了解RocketMQ。简单来说,就是一个分

使用opencv优化图片(画面变清晰)

文章目录 需求影响照片清晰度的因素 实现降噪测试代码 锐化空间锐化Unsharp Masking频率域锐化对比测试 对比度增强常用算法对比测试 需求 对图像进行优化,使其看起来更清晰,同时保持尺寸不变,通常涉及到图像处理技术如锐化、降噪、对比度增强等 影响照片清晰度的因素 影响照片清晰度的因素有很多,主要可以从以下几个方面来分析 1. 拍摄设备 相机传感器:相机传

阿里开源语音识别SenseVoiceWindows环境部署

SenseVoice介绍 SenseVoice 专注于高精度多语言语音识别、情感辨识和音频事件检测多语言识别: 采用超过 40 万小时数据训练,支持超过 50 种语言,识别效果上优于 Whisper 模型。富文本识别:具备优秀的情感识别,能够在测试数据上达到和超过目前最佳情感识别模型的效果。支持声音事件检测能力,支持音乐、掌声、笑声、哭声、咳嗽、喷嚏等多种常见人机交互事件进行检测。高效推

pdfmake生成pdf的使用

实际项目中有时会有根据填写的表单数据或者其他格式的数据,将数据自动填充到pdf文件中根据固定模板生成pdf文件的需求 文章目录 利用pdfmake生成pdf文件1.下载安装pdfmake第三方包2.封装生成pdf文件的共用配置3.生成pdf文件的文件模板内容4.调用方法生成pdf 利用pdfmake生成pdf文件 1.下载安装pdfmake第三方包 npm i pdfma