使用docker-compose部署RocketMQ5.x 单机部署+配置参数详解

2023-05-16

使用docker-compose部署RocketMQ5.x 单机部署+配置参数详解

  • 镜像拉取
    • 拉取RocketMQ服务镜像(使用apache/rocketmq镜像包含NameServer+Broker+Proxy...)
    • 拉取RocketMQ控制台镜像(rocketmq-dashboard)
  • 安装docker-compose v2版本并赋予权限(已经安装跳过这一步)
  • 比对docker版本对应的Compose file format
  • 创建需要挂载的文件夹和文件
    • 创建NameServer需要挂载的文件夹和文件
      • 创建挂载文件夹
      • 创建挂载文件
    • 创建Broker需要挂载的文件夹和文件
      • 创建的挂载文件夹
      • 创建broker.conf文件
      • 拷贝容器内Broker启动脚本到宿主机(如果不需要自定义堆内存可以跳过)
  • 编写docker-compose.yml文件
  • 启动服务
  • Broker配置详解

镜像拉取

提前先拉取需要的镜像文件,避免后面部署的时候出现镜像拉取失败的问题。

拉取RocketMQ服务镜像(使用apache/rocketmq镜像包含NameServer+Broker+Proxy…)

镜像地址: https://hub.docker.com/r/apache/rocketmq/tags
我在部署的时候最新发行版是5.1.0可以根据需求自行选择一个5.x的版本,部署流程不会有太大改变。

docker pull apache/rocketmq:5.1.0

在这里插入图片描述
在这里插入图片描述

拉取RocketMQ控制台镜像(rocketmq-dashboard)

拉取最新版即可

docker pull apacherocketmq/rocketmq-dashboard:latest

安装docker-compose v2版本并赋予权限(已经安装跳过这一步)

这里使用compose v2版本
1、下载(使用get.daocloud.io国内链接下载)

sudo curl -L "https://get.daocloud.io/docker/compose/releases/download/v2.15.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

2、添加执行权限

chmod +x /usr/local/bin/docker-compose

3、验证

# docker Compose v2版本命令
docker compose version
Docker Compose version v2.15.1
# docker Compose v1版本命令
docker-compose -version

4、删除docker-compose

sudo rm /usr/local/bin/docker-compose

比对docker版本对应的Compose file format

编写前先比对一下自己的docker版本对应的Compose file format,我的docker用的版本比较新这里可以用3.8或者直接写3也行
https://docs.docker.com/compose/compose-file/compose-versioning/

docker --version

在这里插入图片描述

在这里插入图片描述

创建需要挂载的文件夹和文件

创建NameServer需要挂载的文件夹和文件

创建挂载文件夹

# 日志目录
mkdir /usr/local/rocketmq/nameserver/logs -p
# 脚本目录
mkdir /usr/local/rocketmq/nameserver/bin -p

设置权限:如果不设置会导致NameServer容器内部无法写日志文件

# 777 文件所属者、文件所属组和其他人有读取 & 写入 & 执行全部权限。rwxrwxrwx
chmod 777 -R /usr/local/rocketmq/nameserver/*

创建挂载文件

NameServer启动脚本中有一个自动计算最大堆内存和新生代内存的函数会导致在不同硬件环境下设置最大堆内存和新生代内存环境变量不被应用,,这里先提前copy一份容器内部启动脚本做挂载,如果想自定义内存可以自己调整。

1、启动容器

docker run -d \
--privileged=true \
--name rmqnamesrv \
apache/rocketmq:5.1.0 sh mqnamesrv

2、复制容器内启动脚本到挂载目录/usr/local/rocketmq/nameserver/bin

docker cp rmqnamesrv:/home/rocketmq/rocketmq-5.1.0/bin/runserver.sh /usr/local/rocketmq/nameserver/bin/runserver.sh

3、修改runserver.sh

# 打开脚本文件
vi /usr/local/rocketmq/nameserver/bin/runserver.sh 

找到调用calculate_heap_sizes函数的位置注释掉保存即可,拉到脚本最底部就能找到
在这里插入图片描述
4、停止&删除容器

docker stop rmqnamesrv
docker rm rmqnamesrv

创建Broker需要挂载的文件夹和文件

创建的挂载文件夹

提前创建挂载目录用于挂载容器内部数据、配置文件、以及日志。

# 创建需要的挂载目录
mkdir /usr/local/rocketmq/broker/logs -p \
mkdir /usr/local/rocketmq/broker/data -p \
mkdir /usr/local/rocketmq/broker/conf -p \
mkdir /usr/local/rocketmq/broker/bin -p

设置权限

# 777 文件所属者、文件所属组和其他人有读取 & 写入 & 执行全部权限。rwxrwxrwx
chmod 777 -R /usr/local/rocketmq/broker/*

创建broker.conf文件

在/usr/local/rocketmq/broker/conf文件夹下创建broker.conf文件

vi /usr/local/rocketmq/broker/conf/broker.conf

添加以下配置信息到broker.conf,这里不对参数做过多的说明,在下面Broker配置详解中有对Broker常用参数做详细介绍

# 集群名称
brokerClusterName = DefaultCluster
# 节点名称
brokerName = broker-a
# broker id节点ID, 0 表示 master, 其他的正整数表示 slave,不能小于0 
brokerId = 0
# Broker服务地址	String	内部使用填内网ip,如果是需要给外部使用填公网ip
brokerIP1 = 192.168.10.220
# Broker角色
brokerRole = ASYNC_MASTER
# 刷盘方式
flushDiskType = ASYNC_FLUSH
# 在每天的什么时间删除已经超过文件保留时间的 commit log,默认值04
deleteWhen = 04
# 以小时计算的文件保留时间 默认值72小时
fileReservedTime = 72
# 是否允许Broker 自动创建Topic,建议线下开启,线上关闭
autoCreateTopicEnable=true
# 是否允许Broker自动创建订阅组,建议线下开启,线上关闭
autoCreateSubscriptionGroup=true

说明:建立broker.conf文件,通过这个文件把RocketMQ的broker管理起来

拷贝容器内Broker启动脚本到宿主机(如果不需要自定义堆内存可以跳过)

Broker启动脚本中有一个自动计算最大堆内存和新生代内存的函数会导致在不同硬件环境下设置最大堆内存和新生代内存环境变量不被应用,,这里先提前copy一份容器内部启动脚本做挂载,如果想自定义内存可以自己调整。

1、启动容器

docker run -d \
--name rmqbroker \
--privileged=true \
apache/rocketmq:5.1.0 \
sh mqbroker

2、复制容器内启动脚本到挂载目录/usr/local/rocketmq/nameserver/bin

docker cp rmqbroker:/home/rocketmq/rocketmq-5.1.0/bin/runbroker.sh /usr/local/rocketmq/broker/bin/runbroker.sh

3、修改runbroker.sh

# 打开脚本文件
vi /usr/local/rocketmq/broker/bin/runbroker.sh 

找到调用calculate_heap_sizes函数的位置注释掉保存即可,拉到脚本最底部就能找到
在这里插入图片描述

4、停止&删除容器

docker stop rmqbroker
docker rm rmqbroker

编写docker-compose.yml文件

进入/usr/local/rocketmq目录,创建docker-compose.yml文件,将下面的编排信息写入

cd /usr/local/rocketmq
vi docker-compose.yml
version: '3.8'
services:
  rmqnamesrv:
    image: apache/rocketmq:5.1.0
    container_name: rmqnamesrv
    ports:
      - 9876:9876
    restart: always
    privileged: true
    volumes:
      - /usr/local/rocketmq/nameserver/logs:/home/rocketmq/logs
      - /usr/local/rocketmq/nameserver/bin/runserver.sh:/home/rocketmq/rocketmq-5.1.0/bin/runserver.sh
    environment:
      - MAX_HEAP_SIZE=256M
      - HEAP_NEWSIZE=128M
    command: ["sh","mqnamesrv"]
  broker:
    image: apache/rocketmq:5.1.0
    container_name: rmqbroker
    ports:
      - 10909:10909
      - 10911:10911
    restart: always
    privileged: true
    volumes:
      - /usr/local/rocketmq/broker/logs:/root/logs
      - /usr/local/rocketmq/broker/store:/root/store
      - /usr/local/rocketmq/broker/conf/broker.conf:/home/rocketmq/broker.conf
      - /usr/local/rocketmq/broker/bin/runbroker.sh:/home/rocketmq/rocketmq-5.1.0/bin/runbroker.sh
    depends_on:
      - 'rmqnamesrv'
    environment:
      - NAMESRV_ADDR=rmqnamesrv:9876
      - MAX_HEAP_SIZE=512M
      - HEAP_NEWSIZE=256M
    command: ["sh","mqbroker","-c","/home/rocketmq/broker.conf"]
  rmqdashboard:
    image: apacherocketmq/rocketmq-dashboard:latest
    container_name: rocketmq-dashboard
    ports:
      - 8080:8080
    restart: always
    privileged: true
    depends_on:
      - 'rmqnamesrv'
    environment:
      - JAVA_OPTS= -Xmx256M -Xms256M -Xmn128M -Drocketmq.namesrv.addr=rmqnamesrv:9876 -Dcom.rocketmq.sendMessageWithVIPChannel=false

启动服务

# docker Compose v2版本命令
docker compose up -d #  -d 指后台运行
# docker Compose v1版本命令
docker-compose up -d #  -d 指后台运行

在这里插入图片描述
启动成功访问控制台
http://192.168.10.220:8080
在这里插入图片描述

Broker配置详解

# nameServer 地址多个用;隔开 默认值null
# 例:127.0.0.1:6666;127.0.0.1:8888 
namesrvAddr = 127.0.0.1:6666
# 集群名称 单机配置可以随意填写,如果是集群部署在同一个集群中集群名称必须一致类似Nacos的命名空间
brokerClusterName = DefaultCluster
# broker节点名称 单机配置可以随意填写,如果是集群部署在同一个集群中节点名称不要重复
brokerName = broker-a
# broker id节点ID, 0 表示 master, 其他的正整数表示 slave,不能小于0 
brokerId = 0
# Broker 对外服务的监听端口 默认值10911
# 端口(注意:broker启动后,会占用3个端口,分别在listenPort基础上-2,+1,供内部程序使用,所以集群一定要规划好端口,避免冲突)
listenPort=10911
# Broker服务地址	String	内部使用填内网ip,如果是需要给外部使用填公网ip
brokerIP1 = 127.0.0.1
# BrokerHAIP地址,供slave同步消息的地址 内部使用填内网ip,如果是需要给外部使用填公网ip
brokerIP2 = 127.0.0.1

# Broker角色 默认值ASYNC_MASTER
# ASYNC_MASTER 异步复制Master,只要主写成功就会响应客户端成功,如果主宕机可能会出现小部分数据丢失
# SYNC_MASTER 同步双写Master,主和从节点都要写成功才会响应客户端成功,主宕机也不会出现数据丢失
# SLAVE
brokerRole = ASYNC_MASTER
# 刷盘方式
# SYNC_FLUSH(同步刷新)相比于ASYNC_FLUSH(异步处理)会损失很多性能,但是也更可靠,所以需要根据实际的业务场景做好权衡,默认值ASYNC_FLUSH
flushDiskType = ASYNC_FLUSH
# 在每天的什么时间删除已经超过文件保留时间的 commit log,默认值04
deleteWhen = 04
# 以小时计算的文件保留时间 默认值72小时
fileReservedTime = 72

# 消息大小 单位字节 默认1024 * 1024 * 4
maxMessageSize=4194304

# 在发送消息时,自动创建服务器不存在的Topic,默认创建的队列数,默认值4
defaultTopicQueueNums=4
# 是否允许Broker 自动创建Topic,建议线下开启,线上关闭
autoCreateTopicEnable=true
# 是否允许Broker自动创建订阅组,建议线下开启,线上关闭
autoCreateSubscriptionGroup=true

# 失败重试时间,默认重试16次进入死信队列,第一次1s第二次5s以此类推。
# 延时队列时间等级默认18个,可以设置多个比如在后面添加一个1d(一天),使用的时候直接用对应时间等级即可,从1开始到18,如果添加了第19个直接使用等级19即可
messageDelayLevel=1s 5s 10s 30s 1m 2m 3m 4m 5m 6m 7m 8m 9m 10m 20m 30m 1h 2h

# 指定TM在20秒内应将最终确认状态发送给TC,否则引发消息回查。默认为60秒
transactionTimeout=20
# 指定最多回查5次,超过后将丢弃消息并记录错误日志。默认15次。
transactionCheckMax=5
# 指定设置的多次消息回查的时间间隔为10秒。默认为60秒。
transactionCheckInterval=10
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用docker-compose部署RocketMQ5.x 单机部署+配置参数详解 的相关文章

  • kubeadm 内网离线安装

    离线安装过程 xff0c 仅供参考 xff0c 陆续更新 机器三台 master 为01 slave 为03 04 以下步骤1到7 xff0c 三台都需操作 一 关闭防火墙 二 关闭swap swapoff a 三 关闭selinux se
  • 冒泡排序

    开发工具与关键技术 xff1a Visual Studio2015 撰写时间 xff1a 2019年7月24日 最原始的交换排序思想 xff1a 对待排序序列中的记录两两比较其关键字 xff0c 发现两个记录呈现逆序时就交换两记录的位置 x
  • 2023知识追踪最新综述来自顶刊!!!——《Knowledge Tracing:A Survey》

    Knowledge Tracing xff1a A Survey 论文在2023年2月收录于ACM Computing Surveys xff08 IF好像有14 xff09 后文里 xff0c 我用技能一词 来 代替原文中的KC know
  • 关于Ubuntu18.04安装Coreform Cubit出现Segmentation fault (core dumped)问题的解决

    Ubuntu18 04只能安装旧版本的Trelis 17 01 xff0c 其他版本不支持
  • 长江游艇俱乐部租金问题

    题目来源 xff1a 王晓东 xff0c 算法设计与分析 长江游艇俱乐部在长江上设置了n个游艇出租站1 xff0c 2 xff0c xff0c n 游客可在这些游艇出租站租用游艇 xff0c 并在下游的任何一个游艇出租站归还游艇 游艇出租站
  • Week4--CSP模拟--C - 可怕的宇宙射线

    文章目录 题目描述输入输出样例输入样例输出思路综述剪枝条件 xff08 满足以下条件 xff0c b点之后的可以忽略 xff09 xff1a 如何建立二维地图记忆化搜索需要的数组方向表示 过程Step1 xff1a Step2 xff1a
  • visualStudio断点报错:当前不会命中断点。还没有为该文档加载任何符号

    原因 xff1a 当前调试的程序和工作目录中的符号表pdb不匹配 符号表 pdb与断点调试 符号表是将编译链接后生成的可执行文件 xff08 exe xff09 和源码做出的一个映射表 xff0c 其中存储的是全局变量 函数的名字和地址 x
  • leetcode 941. 有效的山脉数组

    给定一个整数数组 A xff0c 如果它是有效的山脉数组就返回 true xff0c 否则返回 false 让我们回顾一下 xff0c 如果 A 满足下述条件 xff0c 那么它是一个山脉数组 xff1a A length gt 61 3
  • Java面向对象-继承

    Java继承的概念与实现 继承是Java面向对象编程技术的一块基石 xff0c 因为它允许创建分等级层次的类 继承是类与类之间的关系 xff0c 是一个很简单很直观的概念 xff0c 与现实世界中的继承 xff08 例如儿子继承父亲财产 x
  • 【IT-Windows】某些设置由你的组织来管理

    方法一 xff1a 1 xff0c 桌面右击 此电脑 xff0c 在右键菜单选择 属性 选项 p1 win10更新取消组织管理图 2 xff0c 在打开的 系统 窗口 xff0c 点击计算机名右边的 更改设置 选项 p2 某些设置有你的组织
  • Debian各个依赖包下载地址

    https packages debian org bullseye amd64 libcrypt1 udeb download https packages debian org bullseye amd64 gcc 10 base do
  • CubeMX生成的代码烧录一次后无法再烧录(识别)STM32,需按住reset后放开才能烧录

    序言 其实很早就遇见过这个问题 xff0c 但因为这个问题太小太基础了 xff0c 就没有做记录 但是过了很久过后再重新回来用CubeMX做STM32开发的时候却总是记不住这点小设置 xff0c 所以又回来写一下这个 这个小问题会在不同的软
  • 程序员晒出了15万的年终奖:辛苦一年,对结果很满意

    又是一年一度炫耀年终奖的日子了 xff0c 在互联网匿名社区 xff0c 有程序员晒出了自己刚到手的年终奖 xff0c 高达15之多的银行流水 xff0c 其称这是税后收入 xff0c 扣税就扣了3 5万之多 xff0c 但对这样的年终奖还
  • 撞库、脱库和洗库是什么意思

  • 解决新安装的 Arch Linux 在 GNOME 中搜狗输入法不显示候选词和输入延迟的问题

    问题描述 新安装的 Arch Linux 系统 在 AUR 中安装 fcitx sogoupinyin 后 fcitx 的图标不显示 xff0c 且切换到搜狗输入法后不显示候选词 xff0c 输入的延迟也极高 xff0c 切换回英文输入法后
  • hashCode和equals作用

    什么是hashCode hashCode 的作用是获取哈希码 xff0c 返回一个int整数 xff0c 作用是查找hashMap的索引位置 hashCode 在JDK的Object类中 xff0c 也就表明每一个类中都有此方法 hashC
  • python学习——while True的用法

    古月金真 while True 是python中经常会被应用到 下面通过个例子进行解释 xff1a 例子 xff1a 建立一个用户登录系统 xff0c 用户输入用户名和密码 xff0c 如果正确就可以进入系统 法一 xff1a d 61 古
  • linux下将gbk文件转换为utf-8

    titledatetagscategories linux下将gbk文件转换为utf 8 2019 11 23 10 49 58 0800 编码 problems 转自Linux下GBK文件编码批量转换UTF 8命令 在工作中 xff0c
  • ubuntu上不了网的解决方法(简便)

    用于我们对于ubuntu的使用比较多 xff0c 网络有时需要更改设置 下面笔者分享一个实用的方法 1 增加多一个网络连接 将鼠标移至左上角上下箭头 xff0c 之后点击爱编辑连接 xff08 不同版本操作方法不一样但其实都是一样的操作路径
  • C++ 快读快输模板

    C 43 43 快读快输模板 快读 span class token keyword inline span span class token keyword int span span class token function read

随机推荐