目录一、生产环境标准架构必用1. 整体架构图极简版2. 核心组件说明二、生产环境推荐部署规格最小高可用集群最常用中型集群业务量较大三、部署步骤生产可直接照做环境准备步骤 1下载解压步骤 2修改 JVM 内存非常重要步骤 3配置 NameServer 集群2 台步骤 4配置 Broker 主从集群核心机器规划1配置 broker1-master2配置 broker1-slave3broker2-master 和 broker2-slave四、Java 生产环境客户端配置生产者消费者五、生产环境关键配置必看六、集群检查命令七、高可用保障机制总结RocketMQ 是阿里开源的分布式消息队列生产环境必须用分布式高可用架构绝对不能单节点部署。本文会用最清晰、生产可直接落地的方式给你讲透架构和部署步骤。一、生产环境标准架构必用生产环境核心目标高可用、无单点故障、可水平扩容。1. 整体架构图极简版生产者集群 → NameServer 集群2~3台 → Broker 主从集群 → 消费者集群2. 核心组件说明NameServer注册中心轻量级无状态服务必须集群部署2~3 台作用Broker 注册、路由发现、心跳检测无主从、无选举随便挂一台不影响整体Broker消息存储核心真正负责消息收发、持久化、高可用生产必须主从架构Master-Slave支持异步刷盘 异步复制性能最高支持同步双写金融级可靠性生产者 / 消费者都是客户端集群无状态可随意扩容通过 NameServer 自动发现 Broker二、生产环境推荐部署规格最小高可用集群最常用NameServer2 台2C4GBroker2 主 2 从4 台4C8GSSDbroker1-master broker1-slavebroker2-master broker2-slave中型集群业务量较大NameServer3 台Broker3 主 3 从6 台磁盘必须用SSD机械盘会导致严重性能瓶颈。三、部署步骤生产可直接照做环境准备LinuxCentOS 7/Ubuntu 20JDK 8必须关闭防火墙 / 开放端口9876 (NameServer)、10911/10912 (Broker)磁盘SSD预留 50GB步骤 1下载解压# 下载稳定版 4.9.5 / 5.1.0生产推荐 4.9.x wget https://archive.apache.org/dist/rocketmq/4.9.5/rocketmq-all-4.9.5-bin-release.zip unzip rocketmq-all-4.9.5-bin-release.zip mv rocketmq-4.9.5 /usr/local/rocketmq cd /usr/local/rocketmq步骤 2修改 JVM 内存非常重要默认内存太大服务器会直接挂修改 NameServer 启动内存vim bin/runserver.sh找到JAVA_OPT${JAVA_OPT} -server -Xms4g -Xmx4g -Xmn2g改为JAVA_OPT${JAVA_OPT} -server -Xms512m -Xmx512m -Xmn256m修改 Broker 启动内存vim bin/runbroker.sh找到JAVA_OPT${JAVA_OPT} -server -Xms8g -Xmx8g改为JAVA_OPT${JAVA_OPT} -server -Xms2g -Xmx2g -Xmn1g步骤 3配置 NameServer 集群2 台每台 NameServer 都执行nohup sh bin/mqnamesrv # 查看日志 tail -f ~/logs/rocketmqlogs/namesrv.log看到The Name Server boot success即启动成功。步骤 4配置 Broker 主从集群核心我们以2 主 2 从为例机器规划192.168.1.10broker1-master192.168.1.11broker1-slave192.168.1.12broker2-master192.168.1.13broker2-slaveNameServer192.168.1.20, 192.168.1.211配置 broker1-mastermkdir -p /data/rocketmq/store mkdir -p /data/rocketmq/logs vim conf/broker.conf写入propertiesbrokerClusterName DefaultCluster brokerName broker1 brokerId 0 # 0master deleteWhen 04 fileReservedTime 48 brokerRole ASYNC_MASTER # 异步主高性能 flushDiskType ASYNC_FLUSH # 异步刷盘 listenPort10911 namesrvAddr192.168.1.20:9876;192.168.1.21:9876 storePathRootDir/data/rocketmq/store storePathCommitLog/data/rocketmq/store/commitlog storePathConsumeQueue/data/rocketmq/store/consumequeue storePathIndex/data/rocketmq/store/index storeCheckpoint/data/rocketmq/store/checkpoint abortFile/data/rocketmq/store/abort启动nohup sh bin/mqbroker -c conf/broker.conf 2配置 broker1-slavepropertiesbrokerClusterName DefaultCluster brokerName broker1 brokerId 1 # 非0slave deleteWhen 04 fileReservedTime 48 brokerRole SLAVE # 从节点 flushDiskType ASYNC_FLUSH listenPort10911 namesrvAddr192.168.1.20:9876;192.168.1.21:9876 storePathRootDir/data/rocketmq/store ...3broker2-master 和 broker2-slavebrokerName broker2brokerId0/masterbrokerId1/slave其他完全一样四、Java 生产环境客户端配置生产者Bean public DefaultMQProducer producer() { DefaultMQProducer producer new DefaultMQProducer(ProducerGroup); // 填所有 NameServer producer.setNamesrvAddr(192.168.1.20:9876;192.168.1.21:9876); producer.setRetryTimesWhenSendFailed(2); producer.setSendMsgTimeout(3000); return producer; }消费者Bean public DefaultMQPushConsumer consumer() throws MQClientException { DefaultMQPushConsumer consumer new DefaultMQPushConsumer(ConsumerGroup); consumer.setNamesrvAddr(192.168.1.20:9876;192.168.1.21:9876); consumer.subscribe(TOPIC_TEST, *); consumer.setMessageListener(new MessageListenerConcurrently() { Override public ConsumeConcurrentlyStatus consumeMessage(...) { return ConsumeConcurrentlyStatus.CONSUME_SUCCESS; } }); return consumer; }五、生产环境关键配置必看brokerRole ASYNC_MASTER高性能flushDiskType ASYNC_FLUSH高性能金融级可用brokerRole SYNC_MASTERflushDiskType SYNC_FLUSH磁盘保留 48 小时开启自动删除过期文件六、集群检查命令# 查看集群状态 sh bin/mqadmin clusterList -n 192.168.1.20:9876 # 查看 Topic 路由 sh bin/mqadmin topicRoute -n 192.168.1.20:9876 -t TOPIC_TEST七、高可用保障机制NameServer 集群 → 无单点Broker 主从 → Master 挂了Slave 自动升主RocketMQ 4.x 需要手动切换5.x 自动切换生产者 / 消费者自动重试、自动发现消息持久化到磁盘总结生产架构NameServer 集群2~3 台 Broker 主从集群2 主 2 从起步部署核心修改 JVM 内存 配置 broker.conf 主从 用 SSD高可用无单点、主从自动切换、消息不丢失Java 客户端配置所有 NameServer 地址即可自动负载