在生产环境中部署 Apache RocketMQ 时,服务器的配置至关重要,直接影响消息系统的性能、稳定性与可靠性。以下是推荐的 RocketMQ 生产服务器配置建议(适用于 Broker 和 NameServer 节点):
一、硬件配置建议
| 组件 | CPU | 内存 | 磁盘类型 | 磁盘容量 | 带宽 |
|---|---|---|---|---|---|
| NameServer | 4核 | 8GB ~ 16GB | SSD | 50GB ~ 100GB | 1Gbps |
| Broker | 16核以上 | 32GB ~ 64GB+ | 高性能 SSD/NVMe | 1TB+(根据消息量) | 1Gbps ~ 10Gbps |
📌 说明:
- NameServer 资源消耗较低,但建议至少部署 2~3 个节点以实现高可用。
- Broker 是核心组件,负责消息存储和转发,对 I/O 性能要求高,强烈建议使用 SSD 或 NVMe 固态硬盘。
- 若消息量大(如日均亿级),建议 Broker 使用更高配置(如 32核 / 64GB+ 内存 / 多块 SSD RAID)。
二、操作系统配置优化
- 操作系统:推荐使用 CentOS 7.x / 8.x 或 Ubuntu 20.04 LTS 等稳定版本。
- 文件系统:使用
ext4或xfs,建议xfs(更适合大文件写入)。 - 内核参数调优(
/etc/sysctl.conf):
# 提高文件句柄数
fs.file-max = 1000000
fs.nr_open = 1000000
# TCP 优化
net.core.rmem_default = 262144
net.core.wmem_default = 262144
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216
net.core.netdev_max_backlog = 10000
net.ipv4.tcp_max_syn_backlog = 8192
net.ipv4.ip_local_port_range = 1024 65535
# 虚拟内存优化(减少 swap 使用)
vm.swappiness = 1
vm.overcommit_memory = 1
应用配置:
sysctl -p
- 文件句柄限制(
/etc/security/limits.conf):
* soft nofile 1000000
* hard nofile 1000000
* soft nproc 1000000
* hard nproc 1000000
三、JVM 配置(Broker)
RocketMQ Broker 是 Java 应用,需合理设置 JVM 参数。示例(适用于 32GB 内存机器):
# 修改 runbroker.sh 中的 JAVA_OPT
JAVA_OPT="${JAVA_OPT} -server -Xms16g -Xmx16g -Xmn8g"
JAVA_OPT="${JAVA_OPT} -XX:+UseG1GC -XX:G1HeapRegionSize=16m"
JAVA_OPT="${JAVA_OPT} -XX:MaxGCPauseMillis=25"
JAVA_OPT="${JAVA_OPT} -XX:InitiatingHeapOccupancyPercent=30"
JAVA_OPT="${JAVA_OPT} -XX:G1MixedGCCountTarget=20"
JAVA_OPT="${JAVA_OPT} -XX:+ExplicitGCInvokesConcurrent"
JAVA_OPT="${JAVA_OPT} -XX:+PrintGCDetails -XX:+PrintGCDateStamps"
JAVA_OPT="${JAVA_OPT} -Xloggc:/dev/shm/rmq_broker_gc_%p.log"
JAVA_OPT="${JAVA_OPT} -XX:+HeapDumpOnOutOfMemoryError"
JAVA_OPT="${JAVA_OPT} -XX:HeapDumpPath=/data/dump"
⚠️ 注意:
-Xms和-Xmx建议设为相同值,避免动态扩容开销。- 推荐使用 G1 GC,适合大堆内存低延迟场景。
- 不要超过物理内存的 70%,留出空间给 Page Cache(RocketMQ 依赖 OS 缓存提升 I/O 性能)。
四、Broker 配置文件(broker.conf)
关键参数配置示例:
# Broker 名称(集群内唯一)
brokerName=broker-a
# 所属集群名称
brokerClusterName=rocketmq-cluster
# Broker ID,0 表示 Master,>0 表示 Slave
brokerId=0
# NameServer 地址
namesrvAddr=192.168.1.10:9876;192.168.1.11:9876;192.168.1.12:9876
# 存储路径
storePathRootDir=/data/rocketmq/store
storePathCommitLog=/data/rocketmq/store/commitlog
storePathConsumerQueue=/data/rocketmq/store/consumequeue
# 消息最大大小(默认 4MB)
maxMessageSize=10485760 # 10MB
# 保留消息时间(默认 72 小时)
fileReservedTime=48 # 单位:小时
# 刷盘方式:ASYNC_FLUSH(高性能)或 SYNC_FLUSH(高可靠)
flushDiskType=ASYNC_FLUSH
# 主从同步方式:SYNC_MASTER(同步双写)或 ASYNC_MASTER(异步复制)
brokerRole=ASYNC_MASTER
# 是否启用DLeger(推荐用于多副本高可用)
enableDLegerCommitLog=false # 若使用 DLedger 高可用集群,则设为 true
# 最大连接数
maxConnection=6000
五、高可用架构建议
- NameServer 集群:部署 3 个节点,客户端自动发现。
- Broker 集群模式:
- 主从复制(Master-Slave):每组 1 主 1 从或 1 主 2 从。
- Dledger 模式(推荐):基于 Raft 协议的自动选主,支持自动故障转移。
- 至少 3 个节点组成一个 Dledger 组。
- 配置
enableDLegerCommitLog=true并设置dLegerGroup,dLegerPeers,dLegerSelfId。
六、监控与运维
- 启用 Prometheus + Grafana 监控(RocketMQ 支持 Metrics Exporter)。
- 日志集中收集(如 ELK / Loki)。
- 定期备份关键数据(如 consumer offset、topic 配置等)。
- 设置告警(磁盘使用率、GC 时间、消息堆积等)。
七、网络要求
- 内网千兆或万兆网络,低延迟。
- 防火墙开放端口:
- NameServer:9876
- Broker:10911(客户端通信)、10909(HA 同步)
总结
| 项目 | 推荐配置 |
|---|---|
| Broker 服务器 | 16核 CPU / 32GB+ 内存 / NVMe SSD / 1Gbps+ |
| NameServer | 4核 / 8GB / SSD / 1Gbps |
| JVM | G1GC,堆大小 16G~32G |
| 刷盘方式 | 异步刷盘(ASYNC_FLUSH) |
| 主从模式 | 推荐使用 Dledger 自动容灾 |
| 监控 | Prometheus + Grafana + 日志系统 |
如你有具体的业务场景(如消息量、延迟要求、是否X_X级高可用),可进一步定制化配置。欢迎提供更多信息,我可以给出更精准的建议。
轻量云Cloud