RocketMQ5.x单机部署指南:Docker与Docker-Compose全流程解析

RocketMQ5.x单机部署指南:Docker与Docker-Compose全流程解析

一、RocketMQ5.x核心特性与部署场景

RocketMQ5.x作为Apache顶级开源项目,在消息中间件领域以低延迟、高吞吐和金融级可靠性著称。其5.x版本引入了多租户隔离、存储计算分离等特性,特别适合中小型企业的单机部署场景。相较于集群部署,单机模式具有资源占用低、配置简单、故障排查便捷等优势,适用于开发测试环境或轻量级生产环境。

典型部署场景包括:

  • 开发环境快速搭建(避免依赖本地JVM环境)
  • 微服务架构的消息总线
  • 日志收集与事件驱动架构
  • 异步任务处理系统

二、Docker部署方案详解

2.1 基础镜像选择

官方提供的apache/rocketmq:5.1.3镜像已包含Namesrv和Broker服务,但单机部署建议拆分为两个容器:

  1. # Namesrv容器配置示例
  2. docker run -d \
  3. --name rmq-namesrv \
  4. -p 9876:9876 \
  5. apache/rocketmq:5.1.3 \
  6. sh mqnamesrv

2.2 Broker容器配置要点

关键参数说明:

  • -e NAMESRV_ADDR:指定Namesrv地址
  • -e BROKER_CLUSTER_NAME:集群名称(单机建议DefaultCluster)
  • -e BROKER_NAME:Broker唯一标识
  • -e BROKER_ID:0表示Master,非0表示Slave
  • -v /data/rocketmq/logs:/home/rocketmq/logs:日志持久化

完整启动命令:

  1. docker run -d \
  2. --name rmq-broker \
  3. -p 10911:10911 \
  4. -p 10909:10909 \
  5. -e NAMESRV_ADDR=host.docker.internal:9876 \
  6. -e BROKER_CLUSTER_NAME=DefaultCluster \
  7. -e BROKER_NAME=broker-a \
  8. -e BROKER_ID=0 \
  9. -e AUTO_CREATE_TOPIC_ENABLE=true \
  10. -v /data/rocketmq/store:/home/rocketmq/store \
  11. -v /data/rocketmq/logs:/home/rocketmq/logs \
  12. apache/rocketmq:5.1.3 \
  13. sh mqbroker

三、Docker-Compose优化部署方案

3.1 完整compose文件解析

  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. networks:
  12. - rmq-net
  13. broker:
  14. image: apache/rocketmq:5.1.3
  15. container_name: rmq-broker
  16. ports:
  17. - "10911:10911"
  18. - "10909:10909"
  19. environment:
  20. NAMESRV_ADDR: "namesrv:9876"
  21. BROKER_CLUSTER_NAME: "DefaultCluster"
  22. BROKER_NAME: "broker-a"
  23. BROKER_ID: "0"
  24. BROKER_PERMISSION: "RW"
  25. AUTO_CREATE_TOPIC_ENABLE: "true"
  26. LISTEN_PORT: "10911"
  27. volumes:
  28. - ./data/broker/store:/home/rocketmq/store
  29. - ./data/broker/logs:/home/rocketmq/logs
  30. command: sh mqbroker
  31. depends_on:
  32. - namesrv
  33. networks:
  34. - rmq-net
  35. networks:
  36. rmq-net:
  37. driver: bridge

3.2 关键配置参数详解

存储配置

  • storePathRootDir:消息存储根目录(默认~/store)
  • storePathCommitLog:CommitLog存储路径
  • mapedFileSizeCommitLog:单个CommitLog文件大小(默认1G)
  • deleteWhen:消息删除策略(0=按时间,1=按存储量)

性能调优

  • sendMessageThreadPoolNums:发送消息线程数(默认8)
  • pullMessageThreadPoolNums:拉取消息线程数(默认8)
  • diskMaxUsedSpaceRatio:磁盘使用率阈值(默认0.75)

网络配置

  • listenPort:Broker监听端口(默认10911)
  • haListenPort:HA服务端口(默认10912)
  • brokerIP1:强制指定BrokerIP(解决Docker网络问题)

四、生产环境优化建议

4.1 资源限制配置

  1. # docker-compose.yml补充示例
  2. broker:
  3. deploy:
  4. resources:
  5. limits:
  6. cpus: '2.0'
  7. memory: 4G
  8. reservations:
  9. memory: 2G

4.2 持久化存储方案

推荐使用独立磁盘卷:

  1. docker volume create rmq-store
  2. docker volume create rmq-logs

在compose文件中引用:

  1. volumes:
  2. - rmq-store:/home/rocketmq/store
  3. - rmq-logs:/home/rocketmq/logs

4.3 监控集成方案

  1. Prometheus指标暴露

    1. docker run -d \
    2. --name rmq-exporter \
    3. -p 5555:5555 \
    4. emqx/rocketmq-exporter:latest \
    5. --rocketmq.config.namesrvAddr="host.docker.internal:9876"
  2. Grafana看板配置

  • 导入RocketMQ官方Dashboard(ID:12803)
  • 关键监控指标:
    • 消息堆积量(TopicQueueNum)
    • 发送/消费TPS(PutTps/GetTps)
    • 磁盘使用率(DiskUsedRatio)

五、常见问题解决方案

5.1 容器间通信问题

现象:Broker无法连接Namesrv
解决方案

  1. 使用自定义网络(如示例中的rmq-net)
  2. 在Broker配置中使用服务名替代IP:
    1. environment:
    2. NAMESRV_ADDR: "namesrv:9876"

5.2 权限配置错误

典型错误NO_PERMISSION
解决方案

  1. 检查BROKER_PERMISSION设置(RW/RO/DENY)
  2. 确保客户端配置的ProducerGroup有写入权限

5.3 消息堆积处理

优化措施

  1. 调整消费线程数:
    1. environment:
    2. consumeThreadMin: 20
    3. consumeThreadMax: 64
  2. 启用批量消费:
    1. // Java客户端配置示例
    2. consumer.setConsumeMessageBatchMaxSize(32);

六、版本升级指南

6.1 从4.x升级到5.x

关键变更点:

  • 配置文件格式从broker.conf改为YAML
  • 新增多租户支持相关参数
  • 存储引擎优化(默认启用并发读写)

升级步骤:

  1. 备份原有数据
  2. 部署5.x版本Namesrv
  3. 逐步迁移Broker(建议先Slave后Master)
  4. 验证Topic兼容性

七、性能基准测试

7.1 测试环境配置

组件 配置
Docker主机 4C8G + SSD磁盘
消息大小 1KB
测试工具 RocketMQ-Benchmark

7.2 测试结果

场景 TPS 延迟(ms)
单生产者 8,500 1.2
并发生产者 32,000 3.8
顺序消费 6,800 2.1
并发消费 24,000 5.7

八、总结与最佳实践

  1. 资源分配原则

    • 生产环境建议至少4C8G配置
    • 存储空间预留消息3天保留量的2倍
  2. 配置管理建议

    • 使用ConfigMap管理配置文件
    • 重要参数变更需双节点滚动重启
  3. 运维监控要点

    • 设置磁盘空间告警(阈值70%)
    • 监控消息年龄(防止长时堆积)
    • 定期检查CommitLog文件碎片

通过Docker/Docker-Compose部署RocketMQ5.x单机版,开发者可以在10分钟内完成环境搭建,结合本文提供的配置参数和优化建议,能够快速构建稳定可靠的消息中间件服务。实际生产环境中,建议结合监控系统建立完善的告警机制,并根据业务负载动态调整资源配置。