RocketMQ 是一款高性能、高可用的分布式消息中间件,广泛应用于大规模分布式系统中。在生产环境中部署 RocketMQ 时,服务器配置需要兼顾性能、稳定性、容错性和可扩展性。以下是生产环境下推荐的 RocketMQ 服务器配置建议,涵盖 NameServer、Broker 和整体系统架构。
一、服务器硬件配置建议(以单台为例)
| 组件 | CPU | 内存 | 磁盘类型 | 磁盘容量 | 网络带宽 | 操作系统 |
|---|---|---|---|---|---|---|
| NameServer | 4核 | 8GB | SSD / SATA | 100GB+ | 1Gbps+ | Linux(CentOS/Ubuntu) |
| Broker | 16核以上 | 32GB~64GB | 高性能 SSD(NVMe) | 1TB~数TB(根据消息量) | 1Gbps~10Gbps | Linux(推荐 CentOS 7+/Ubuntu 20.04+) |
📌 说明:
- NameServer 资源消耗较低,但建议至少部署 2 台以上实现高可用。
- Broker 是核心组件,负责消息存储和转发,对磁盘 I/O 和内存要求高。
- 使用 SSD 磁盘 是必须的,尤其是 NVMe SSD,可显著提升写入吞吐和降低延迟。
- 若消息量大或持久化要求高,建议配置 RAID 10 或使用云盘(如 AWS EBS gp3、阿里云 ESSD)。
二、Broker 配置优化(broker.conf 示例)
# Broker 服务器名称(集群内唯一)
brokerName=broker-a
# Broker ID,0 表示 Master,>0 表示 Slave
brokerId=0
# 删除文件间隔(小时)
fileReservedTime=48
# 是否启用自动创建主题(生产环境建议关闭,手动创建)
autoCreateTopicEnable=false
# 最大消息大小(默认 4MB,可调大)
maxMessageSize=10485760 # 10MB
# 刷盘方式:ASYNC_FLUSH(异步刷盘,性能高)或 SYNC_FLUSH(同步刷盘,更安全)
flushDiskType=ASYNC_FLUSH
# 内存映射文件大小(CommitLog、ConsumeQueue)
mapedFileSizeCommitLog=1073741824 # 1GB
mapedFileSizeConsumeQueue=300000 # 通常无需修改
# 存储路径(建议挂载独立 SSD)
storePathRootDir=/data/rocketmq/store
storePathCommitLog=/data/rocketmq/store/commitlog
storePathConsumerQueue=/data/rocketmq/store/consumequeue
# 主从复制方式:ASYNC_MASTER 或 SYNC_MASTER
brokerRole=ASYNC_MASTER
# 消息索引是否开启
messageIndexEnable=true
messageIndexCleanResourceInterval=60000
# 线程池配置(根据 CPU 核数调整)
sendMessageThreadPoolNums=32
pullMessageThreadPoolNums=32
✅ 生产建议:
autoCreateTopicEnable=false:避免主题混乱,应通过运维脚本或控制台手动创建。flushDiskType=ASYNC_FLUSH:兼顾性能与可靠性,若要求强一致性可用SYNC_FLUSH(性能下降明显)。brokerRole=SYNC_MASTER:适用于对数据一致性要求极高的场景(如X_X),但延迟更高。
三、集群架构建议(高可用部署)
1. 多副本主从架构(推荐)
- NameServer 集群:至少 2~3 个节点,无状态,可水平扩展。
- Broker 集群:
- 每个 Master 配置一个或多个 Slave(异步或同步复制)。
- 支持多 Master 多 Slave 架构(如 2主2从)。
- 使用 Dledger 模式(推荐)实现自动主从切换(Raft 协议),避免单点故障。
2. Dledger 模式配置(推荐用于生产)
# 启用 DLedger 模式(替代主从)
enableDLegerCommitLog=true
dLegerGroup=broker-a
dLegerPeers=n1:192.168.1.10:40911;n2:192.168.1.11:40911;n3:192.168.1.12:40911
dLegerSelfId=n1
# 自动切换,无需手动配置主从
✅ 优势:自动选主、高可用、数据强一致,适合云原生环境。
四、操作系统与 JVM 调优
1. JVM 参数(runbroker.sh 中调整)
# 推荐 JVM 参数(64GB 内存为例)
-Xms32g -Xmx32g -Xmn16g
-XX:+UseG1GC -XX:G1HeapRegionSize=16m
-XX:MaxGCPauseMillis=50
-XX:G1ReservePercent=25
-XX:InitiatingHeapOccupancyPercent=30
-XX:+DisableExplicitGC
📌 建议堆内存不超过物理内存的 70%,剩余内存供 PageCache 使用(RocketMQ 依赖 OS 缓存提升性能)。
2. 系统参数优化(/etc/sysctl.conf)
vm.max_map_count=655360
vm.overcommit_memory=1
net.core.rmem_max=16777216
net.core.wmem_max=16777216
fs.file-max=1000000
3. 文件句柄限制(/etc/security/limits.conf)
* soft nofile 100000
* hard nofile 100000
五、监控与运维
- 监控工具:
- Prometheus + Grafana(通过 RocketMQ Exporter)
- 自研监控系统或阿里云 ARMS
- 日志管理:
- 日志路径:
~/logs/rocketmqlogs/ - 建议使用 ELK 或 Loki 集中收集
- 日志路径:
- 备份策略:
- 定期备份
store目录(尤其是 CommitLog) - 可结合云存储做异地备份
- 定期备份
六、网络与安全
- 所有节点部署在 内网,通过防火墙限制访问。
- NameServer 和 Broker 之间保持低延迟(建议在同一可用区)。
- 对外访问通过 Proxy 层 或 API 网关,避免直接暴露 Broker。
总结:生产环境最佳实践
| 项目 | 推荐配置 |
|---|---|
| 部署模式 | 多 Master + Dledger 高可用 |
| 磁盘 | NVMe SSD,独立挂载 |
| 刷盘方式 | ASYNC_FLUSH(性能优先)或 SYNC_FLUSH(安全优先) |
| 主从复制 | Dledger 模式(自动故障转移) |
| JVM 堆大小 | 32G~64G,G1GC |
| 是否自动创建 Topic | 关闭 |
| 监控 | Prometheus + Grafana |
| 操作系统 | CentOS 7+/Ubuntu 20.04+ |
如需具体部署脚本或 Docker/K8s 部署方案,也可进一步提供。
秒懂云