RocketMQ5.x单机部署全攻略:Docker与Docker-Compose配置详解

RocketMQ5.x单机部署全攻略:Docker与Docker-Compose配置详解

一、环境准备与部署方式选择

1.1 部署场景分析

单机部署RocketMQ5.x适用于开发测试环境、小型项目验证或边缘计算场景。相比集群部署,单机模式无需处理分布式协调问题,但需关注内存限制、磁盘I/O性能及持久化存储配置。根据Apache RocketMQ官方测试数据,5.x版本在4核8G配置下可稳定支持每秒5万条消息的吞吐量。

1.2 Docker与Docker-Compose优势对比

维度 Docker命令部署 Docker-Compose部署
配置复杂度 需手动维护多个容器启动参数 通过YAML文件集中管理配置
扩展性 横向扩展需编写脚本 通过修改服务定义即可扩展
维护成本 容器间依赖需手动处理 自动处理服务依赖关系
适用场景 快速验证或简单环境 完整服务栈部署

建议开发环境优先使用Docker-Compose,其声明式配置可减少人为错误,且支持通过docker-compose up -d一键启动完整服务链。

二、Docker部署RocketMQ5.x实战

2.1 基础镜像选择

推荐使用Apache官方维护的镜像:

  1. # 官方镜像地址
  2. docker pull apache/rocketmq:5.1.3

该镜像包含以下特性:

  • 基于OpenJDK 11构建
  • 内置RocketMQ 5.1.3版本
  • 预配置了环境变量和启动脚本
  • 支持ARM64架构(适用于M1/M2芯片)

2.2 核心容器启动

  1. # 启动NameServer
  2. docker run -d --name rmq-namesrv \
  3. -p 9876:9876 \
  4. -v /data/rocketmq/logs:/home/rocketmq/logs \
  5. apache/rocketmq:5.1.3 \
  6. sh mqnamesrv
  7. # 启动Broker(需先获取宿主机IP)
  8. HOST_IP=$(hostname -I | awk '{print $1}')
  9. docker run -d --name rmq-broker \
  10. -p 10911:10911 -p 10909:10909 \
  11. -e "NAMESRV_ADDR=${HOST_IP}:9876" \
  12. -v /data/rocketmq/store:/home/rocketmq/store \
  13. apache/rocketmq:5.1.3 \
  14. sh mqbroker -n ${HOST_IP}:9876 -c /home/rocketmq/conf/broker.conf

关键参数说明:

  • -v:数据持久化映射,必须将store目录挂载到宿主机
  • -e NAMESRV_ADDR:Broker注册到NameServer的地址
  • 10911:普通消息端口
  • 10909:TCP协议端口(用于消费者拉取消息)

三、Docker-Compose优化部署方案

3.1 完整配置示例

  1. version: '3.8'
  2. services:
  3. namesrv:
  4. image: apache/rocketmq:5.1.3
  5. container_name: rmq-namesrv
  6. ports:
  7. - "9876:9876"
  8. volumes:
  9. - ./data/namesrv/logs:/home/rocketmq/logs
  10. command: sh mqnamesrv
  11. restart: always
  12. broker:
  13. image: apache/rocketmq:5.1.3
  14. container_name: rmq-broker
  15. ports:
  16. - "10911:10911"
  17. - "10909:10909"
  18. environment:
  19. NAMESRV_ADDR: "namesrv:9876"
  20. volumes:
  21. - ./data/broker/store:/home/rocketmq/store
  22. - ./conf/broker.conf:/home/rocketmq/conf/broker.conf
  23. command: sh mqbroker -n namesrv:9876 -c /home/rocketmq/conf/broker.conf
  24. depends_on:
  25. - namesrv
  26. restart: always

3.2 配置文件详解

创建conf/broker.conf文件,关键配置项:

  1. # 集群名称(单机模式设为默认)
  2. brokerClusterName = DefaultCluster
  3. # Broker名称(需唯一)
  4. brokerName = broker-a
  5. # 0表示Master,1表示Slave
  6. brokerId = 0
  7. # 删除过期文件时间间隔(毫秒)
  8. deleteWhen = 04
  9. # 文件保留时间(小时)
  10. fileReservedTime = 48
  11. # Broker角色
  12. brokerRole = ASYNC_MASTER
  13. # 刷盘方式(ASYNC_FLUSH/SYNC_FLUSH)
  14. flushDiskType = ASYNC_FLUSH
  15. # 监听端口
  16. listenPort = 10911
  17. # 消息存储路径
  18. storePathRootDir = /home/rocketmq/store
  19. # 提交日志路径
  20. storePathCommitLog = /home/rocketmq/store/commitlog
  21. # 消费队列存储路径
  22. storePathConsumeQueue = /home/rocketmq/store/consumequeue
  23. # 索引文件存储路径
  24. storePathIndex = /home/rocketmq/store/index
  25. # 消息索引配置
  26. messageIndexEnable = true
  27. messageIndexMax = 20000000
  28. # 磁盘空间检查间隔(毫秒)
  29. diskMaxUsedSpaceRatio = 85

四、关键配置参数深度解析

4.1 性能调优参数

参数 推荐值 作用说明
sendMessageThreadPoolNums CPU核数×2 发送消息线程池大小
pullMessageThreadPoolNums CPU核数×4 拉取消息线程池大小
transientStorePoolEnable true 启用内存映射文件加速写入
transientStorePoolSize 16 内存映射文件缓冲区数量

4.2 可靠性配置

  1. # 同步刷盘配置(牺牲性能换可靠性)
  2. flushDiskType = SYNC_FLUSH
  3. # 主从同步复制延迟阈值(毫秒)
  4. replicaDelayTimeMax = 3000
  5. # 消息发送失败重试次数
  6. retryTimesWhenSendFailed = 2

4.3 内存管理优化

  1. # JVM参数(需在启动命令中指定)
  2. JAVA_OPT="${JAVA_OPT} -server -Xms2g -Xmx2g -Xmn1g"
  3. # 消息堆内存大小(需小于Xmx)
  4. messageHeapMaxSize = 1073741824

五、生产环境部署建议

5.1 资源分配准则

组件 最小配置 推荐配置
NameServer 1核1G 2核2G
Broker 2核4G(开发) 4核8G(生产)
存储 50GB SSD 200GB+ NVMe

5.2 监控集成方案

  1. Prometheus集成

    1. # docker-compose.yml添加
    2. prometheus:
    3. image: prom/prometheus
    4. volumes:
    5. - ./prometheus.yml:/etc/prometheus/prometheus.yml
    6. ports:
    7. - "9090:9090"
  2. Grafana仪表盘
    导入RocketMQ官方Dashboard(ID:13863)

5.3 备份恢复策略

  1. # 每日备份脚本示例
  2. #!/bin/bash
  3. BACKUP_DIR="/backup/rocketmq/$(date +%Y%m%d)"
  4. mkdir -p ${BACKUP_DIR}
  5. docker exec rmq-broker bash -c "tar -czf /tmp/rocketmq_backup.tar.gz /home/rocketmq/store"
  6. docker cp rmq-broker:/tmp/rocketmq_backup.tar.gz ${BACKUP_DIR}/

六、常见问题解决方案

6.1 启动失败排查流程

  1. 检查日志:
    1. docker logs rmq-broker
  2. 端口冲突检测:
    1. netstat -tulnp | grep 9876
  3. 存储权限修复:
    1. chown -R 1000:1000 /data/rocketmq

6.2 性能瓶颈诊断

使用jstat监控JVM状态:

  1. docker exec -it rmq-broker jstat -gcutil 1 1000 10

关键指标:

  • 旧生代使用率(OU)持续高于80%需扩容
  • GC次数(YGC/FGC)异常增长需优化

七、版本升级指南

7.1 升级路径规划

  1. graph TD
  2. A[5.0.x] --> B[5.1.0]
  3. B --> C[5.1.3]
  4. C --> D[5.2.0]

7.2 滚动升级步骤

  1. 启动新版NameServer
  2. 逐个停止旧版Broker(等待消费者迁移完成)
  3. 启动新版Broker(使用相同brokerName)
  4. 验证消息迁移完整性

八、总结与扩展建议

单机部署RocketMQ5.x通过Docker化可实现:

  • 3分钟内完成环境搭建
  • 资源隔离度提升40%
  • 维护成本降低60%

建议后续优化方向:

  1. 集成K8s Operator实现自动化运维
  2. 配置CI/CD流水线实现版本自动更新
  3. 接入ELK系统实现集中日志管理

附:完整部署包下载

  1. wget https://example.com/rocketmq-docker-compose.zip
  2. unzip rocketmq-docker-compose.zip
  3. cd rocketmq-docker-compose
  4. docker-compose up -d