RocketMQ 生产环境服务器的配置需要综合考虑性能、高可用性、数据安全和可维护性。以下是一套典型的生产环境服务器配置建议,适用于中大型企业级部署。
一、集群架构建议(生产环境推荐部署)
建议采用 多主多从(Master-Slave)同步双写 + Dledger 模式(推荐),实现高可用和自动主从切换:
- NameServer 集群:3 台或以上(奇数台,如 3/5),无状态,可水平扩展。
- Broker 集群:
- 至少 2 个 Master Broker(建议 3 个以上)。
- 每个 Master 配置 1 个或多个 Slave。
- 推荐使用 Dledger 模式(基于 Raft 协议),实现自动主从切换,避免单点故障。
- Topic 和 Queue 分布:合理设置队列数量(如每个 Broker 上 8~16 个 queue),提高并发能力。
二、服务器硬件配置建议
| 角色 | CPU | 内存 | 磁盘类型 | 磁盘容量 | 网络 | 数量 |
|---|---|---|---|---|---|---|
| NameServer | 4 核 | 8 GB | SSD | 100 GB | 千兆以上 | 3+ |
| Broker(Master) | 16 核以上 | 32~64 GB | 高性能 SSD(NVMe) | 1~2 TB(根据消息保留时间) | 万兆网卡(推荐) | 3+ |
| Broker(Slave) | 同 Master | 同 Master | 同 Master | 同 Master | 同 Master | 与 Master 一致 |
说明:
- 磁盘 IO 是瓶颈,强烈建议使用 SSD,尤其是 NVMe SSD。
- 内存:Broker 需要足够内存用于 PageCache 提升读写性能,建议 32GB 起步。
- 网络:高吞吐场景建议万兆网络,避免网络成为瓶颈。
- 磁盘容量:根据消息量和保留时间计算。例如:每天 1TB 消息,保留 3 天,则至少 3TB。
三、操作系统与JVM配置
1. 操作系统建议
- Linux 发行版:CentOS 7+/Rocky Linux/Ubuntu 20.04+
-
内核参数优化:
# 提高文件句柄数 ulimit -n 1000000 # 优化网络参数 net.core.somaxconn = 65535 net.ipv4.tcp_max_syn_backlog = 65535 net.core.netdev_max_backlog = 65535 - 关闭透明大页(THP):
echo never > /sys/kernel/mm/transparent_hugepage/enabled
2. JVM 参数建议(Broker)
-Xms32g
-Xmx32g
-Xmn16g
-XX:+UseG1GC
-XX:G1HeapRegionSize=16m
-XX:MaxGCPauseMillis=20
-XX:InitiatingHeapOccupancyPercent=35
-XX:+UnlockExperimentalVMOptions
-XX:+DisableExplicitGC
-XX:+PrintGCDetails
-XX:+PrintGCDateStamps
-XX:+PrintGCApplicationStoppedTime
-Xloggc:/data/rocketmq/logs/gc.log
建议使用 G1 GC,避免 Full GC 长暂停。
四、RocketMQ Broker 配置文件(broker.conf)关键参数
# Broker 服务器配置
brokerClusterName = DefaultCluster
brokerName = broker-a
brokerId = 0 # 0 表示 Master,>0 表示 Slave
# 使用 Dledger 模式(推荐)
enableDLegerCommitLog=true
dLegerGroup=broker-a
dLegerPeers=n1-192.168.1.101:40911;n2-192.168.1.102:40911;n3-192.168.1.103:40911
dLegerSelfId=n1
# 存储路径
storePathRootDir=/data/rocketmq/store
storePathCommitLog=/data/rocketmq/store/commitlog
storePathConsumeQueue=/data/rocketmq/store/consumequeue
storePathIndex=/data/rocketmq/store/index
# 消息保留时间(小时)
fileReservedTime=72 # 保留3天
# 单个 CommitLog 文件大小(默认1G)
mapedFileSizeCommitLog=1073741824
# 是否开启消息索引
enableConsumeQueueExt=true
consumeQueueExtMaxAddr=16777216
# 刷盘方式(生产环境建议 SYNC_MASTER)
flushDiskType=ASYNC_FLUSH # 或 SYNC_FLUSH(更高可靠性)
# 主从复制方式
brokerRole=SYNC_MASTER # 或 ASYNC_MASTER / SLAVE
# 最大消息大小
maxMessageSize=1048576 # 1MB
# 线程池配置
sendMessageThreadPoolNums=32
pullMessageThreadPoolNums=64
五、高可用与运维建议
-
监控告警:
- 使用 Prometheus + Grafana 监控 RocketMQ(可通过
rocketmq-exporter)。 - 监控指标:消息堆积、TPS、延迟、磁盘使用率、JVM GC。
- 使用 Prometheus + Grafana 监控 RocketMQ(可通过
-
备份与恢复:
- 定期备份
store目录(尤其是 commitlog)。 - 使用
mqadmin工具进行运维操作。
- 定期备份
-
安全:
- 开启 ACL(访问控制)。
- 网络隔离,限制访问 IP。
- TLS 加密通信(可选)。
-
升级与维护:
- 滚动升级 Broker,避免服务中断。
- 使用 Dledger 模式支持自动故障转移。
六、典型部署拓扑示例
NameServer 集群:
ns1: 192.168.1.10:9876
ns2: 192.168.1.11:9876
ns3: 192.168.1.12:9876
Broker 集群(Dledger 模式,3 节点 Raft 组):
broker-a-n1: 192.168.1.21 (Master)
broker-a-n2: 192.168.1.22 (Slave/Follower)
broker-a-n3: 192.168.1.23 (Slave/Follower)
Producer/Consumer 连接多个 NameServer 地址即可。
七、性能调优建议
- 批量发送消息:提升吞吐。
- 合理设置 Topic 和 Queue 数量:避免过少导致并发瓶颈。
- 使用异步刷盘 + 异步复制:在可靠性可接受时提升性能。
- 避免消息过大:建议单条消息 < 1MB。
总结
生产环境部署 RocketMQ 应重点关注:
✅ 高可用(Dledger + 多副本)
✅ 高性能(SSD + 合理 JVM + G1GC)
✅ 可监控(Prometheus + Grafana)
✅ 可维护(备份、告警、滚动升级)
如需更高 SLA,可结合 RocketMQ on Kubernetes(如使用 Apache RocketMQ Operator)实现云原生部署。
如你有具体的业务场景(如日均消息量、延迟要求等),可进一步定制配置。
CDNK博客