RocketMQ5.x单机部署指南:Docker与Docker-Compose实战+参数详解

引言

RocketMQ作为Apache基金会旗下的顶级开源项目,是一款低延迟、高并发、高可靠的分布式消息中间件。随着5.x版本的发布,RocketMQ在性能、可观测性和易用性方面均有显著提升。对于开发测试环境或小型项目,单机部署是快速验证业务逻辑的理想选择。本文将详细介绍如何通过Docker和Docker-Compose实现RocketMQ5.x的单机部署,并深入解析关键配置参数。

一、环境准备

1.1 系统要求

  • 操作系统:Linux(推荐CentOS 7+/Ubuntu 20.04+)或macOS(Docker Desktop)
  • 硬件配置:至少4核CPU、8GB内存、50GB可用磁盘空间
  • 软件依赖:Docker 20.10+、Docker-Compose 1.29+

1.2 安装Docker与Docker-Compose

  1. # CentOS 7安装示例
  2. sudo yum install -y yum-utils
  3. sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
  4. sudo yum install docker-ce docker-ce-cli containerd.io
  5. sudo systemctl enable --now docker
  6. # 安装Docker-Compose
  7. sudo curl -L "https://github.com/docker/compose/releases/download/v2.20.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
  8. sudo chmod +x /usr/local/bin/docker-compose

二、Docker部署RocketMQ5.x

2.1 单机部署基础命令

  1. # 拉取官方镜像(推荐使用apache/rocketmq:5.1.3)
  2. docker pull apache/rocketmq:5.1.3
  3. # 启动NameServer
  4. docker run -d --name rmq-namesrv \
  5. -p 9876:9876 \
  6. -e "JAVA_OPT_EXT=-Xms512m -Xmx512m" \
  7. apache/rocketmq:5.1.3 sh mqnamesrv
  8. # 启动Broker(基础配置)
  9. docker run -d --name rmq-broker \
  10. -p 10911:10911 -p 10909:10909 \
  11. --link rmq-namesrv:namesrv \
  12. -e "NAMESRV_ADDR=namesrv:9876" \
  13. -e "JAVA_OPT_EXT=-Xms1g -Xmx1g" \
  14. apache/rocketmq:5.1.3 sh mqbroker -n namesrv:9876

2.2 关键配置参数解析

2.2.1 NameServer配置

  • -p 9876:9876:暴露NameServer默认端口
  • JAVA_OPT_EXT:JVM参数,建议生产环境设置为-Xms1g -Xmx1g
  • 内存配置原则:NameServer内存占用通常较低,但需保证足够GC空间

2.2.2 Broker核心配置

  1. # 完整Broker启动参数示例
  2. docker run -d --name rmq-broker \
  3. -p 10911:10911 -p 10909:10909 -p 10912:10912 \
  4. --link rmq-namesrv:namesrv \
  5. -e "NAMESRV_ADDR=namesrv:9876" \
  6. -e "JAVA_OPT_EXT=-Xms2g -Xmx2g -XX:+UseG1GC" \
  7. -v /data/rocketmq/logs:/home/rocketmq/logs \
  8. -v /data/rocketmq/store:/home/rocketmq/store \
  9. apache/rocketmq:5.1.3 sh mqbroker \
  10. -n namesrv:9876 \
  11. -c /home/rocketmq/conf/broker.conf

关键参数说明:

  1. 端口映射

    • 10911:默认TCP端口(生产者连接)
    • 10909:默认SSL端口(需配置证书)
    • 10912:默认HTTP端口(用于控制台)
  2. 存储配置

    • -v /data/rocketmq/store:持久化存储目录(包含commitlog、consumequeue等)
    • 建议使用SSD磁盘,IOPS需≥3000
  3. broker.conf核心参数

    1. # /home/rocketmq/conf/broker.conf 示例
    2. brokerClusterName = DefaultCluster
    3. brokerName = broker-a
    4. brokerId = 0
    5. deleteWhen = 04
    6. fileReservedTime = 48
    7. brokerRole = ASYNC_MASTER
    8. flushDiskType = ASYNC_FLUSH
    9. # 生产环境建议调整
    10. diskMaxUsedSpaceRatio = 0.85
    11. messageIndexEnable = true
    12. messageIndexMax = 20000000

三、Docker-Compose优化部署

3.1 完整docker-compose.yml示例

  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. environment:
  9. JAVA_OPT_EXT: "-Xms512m -Xmx512m -XX:+UseG1GC"
  10. command: sh mqnamesrv
  11. volumes:
  12. - ./data/namesrv/logs:/home/rocketmq/logs
  13. restart: always
  14. broker:
  15. image: apache/rocketmq:5.1.3
  16. container_name: rmq-broker
  17. ports:
  18. - "10911:10911"
  19. - "10909:10909"
  20. - "10912:10912"
  21. environment:
  22. NAMESRV_ADDR: "namesrv:9876"
  23. JAVA_OPT_EXT: "-Xms2g -Xmx2g -XX:+UseG1GC"
  24. command: sh mqbroker -n namesrv:9876 -c /home/rocketmq/conf/broker.conf
  25. volumes:
  26. - ./data/broker/logs:/home/rocketmq/logs
  27. - ./data/broker/store:/home/rocketmq/store
  28. - ./conf/broker.conf:/home/rocketmq/conf/broker.conf
  29. depends_on:
  30. - namesrv
  31. restart: always

3.2 部署步骤

  1. 创建目录结构:

    1. mkdir -p rocketmq/{data/namesrv/logs,data/broker/{logs,store},conf}
  2. 创建broker.conf配置文件(内容同上节示例)

  3. 启动服务:

    1. docker-compose up -d
  4. 验证部署:
    ```bash

    检查容器状态

    docker-compose ps

使用RocketMQ命令行工具验证

docker exec -it rmq-broker sh mqadmin clusterList -n namesrv:9876

  1. # 四、生产环境优化建议
  2. ## 4.1 性能调优参数
  3. 1. **JVM调优**:
  4. - 堆内存设置:`-Xms4g -Xmx4g`(根据机器内存调整)
  5. - GC策略:`-XX:+UseG1GC -XX:G1HeapRegionSize=16m`
  6. 2. **Broker配置**:
  7. ```properties
  8. # 高并发场景建议
  9. maxMessageSize=8388608 # 8MB
  10. sendMessageThreadPoolNums=16
  11. pullMessageThreadPoolNums=32
  1. 操作系统调优
    1. # 修改系统限制
    2. echo "* soft nofile 655350" >> /etc/security/limits.conf
    3. echo "* hard nofile 655350" >> /etc/security/limits.conf

4.2 监控配置

  1. Prometheus监控

    • 启用JMX暴露:
      1. environment:
      2. JAVA_OPTS: "-Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=10999 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false"
    • 配置Prometheus抓取JMX指标
  2. 控制台部署

    1. docker run -d --name rmq-console \
    2. -p 8080:8080 \
    3. --link rmq-namesrv:namesrv \
    4. -e "JAVA_OPTS=-Drocketmq.namesrv.addr=namesrv:9876" \
    5. styletang/rocketmq-console-ng

五、常见问题解决方案

5.1 启动失败排查

  1. 端口冲突

    • 检查987610911等端口是否被占用
    • 使用netstat -tulnp | grep 9876排查
  2. 存储权限问题

    • 确保挂载目录有写入权限:
      1. chown -R 1000:1000 /data/rocketmq
  3. 内存不足

    • 调整Docker资源限制:
      1. deploy:
      2. resources:
      3. limits:
      4. memory: 4G

5.2 性能瓶颈分析

  1. 消息堆积处理

    • 监控/home/rocketmq/store/consumequeue目录大小
    • 调整diskMaxUsedSpaceRatio参数
  2. 网络延迟优化

    • 使用--network host模式(单机环境)
    • 调整sendMessageThreadPoolNums线程数

结论

通过Docker和Docker-Compose部署RocketMQ5.x单机版,开发者可以在10分钟内完成环境搭建。关键在于:

  1. 合理配置JVM参数和存储路径
  2. 根据业务场景调整broker.conf中的核心参数
  3. 建立完善的监控体系

建议生产环境采用集群部署方案,但单机部署仍是开发测试和轻量级应用的理想选择。掌握本文介绍的配置参数后,读者可根据实际负载动态调整系统表现。