news 2026/5/27 18:20:09

Java 生产环境 RocketMQ 架构与部署指南

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Java 生产环境 RocketMQ 架构与部署指南

目录

一、生产环境标准架构(必用)

1. 整体架构图(极简版)

2. 核心组件说明

二、生产环境推荐部署规格

最小高可用集群(最常用)

中型集群(业务量较大)

三、部署步骤(生产可直接照做)

环境准备

步骤 1:下载解压

步骤 2:修改 JVM 内存(非常重要)

步骤 3:配置 NameServer 集群(2 台)

步骤 4:配置 Broker 主从集群(核心)

机器规划

1)配置 broker1-master

2)配置 broker1-slave

3)broker2-master 和 broker2-slave

四、Java 生产环境客户端配置

生产者

消费者

五、生产环境关键配置(必看)

六、集群检查命令

七、高可用保障机制

总结


RocketMQ 是阿里开源的分布式消息队列,生产环境必须用分布式高可用架构,绝对不能单节点部署。本文会用最清晰、生产可直接落地的方式,给你讲透架构部署步骤


一、生产环境标准架构(必用)

生产环境核心目标:高可用、无单点故障、可水平扩容

1. 整体架构图(极简版)

生产者集群 → NameServer 集群(2~3台) → Broker 主从集群 → 消费者集群

2. 核心组件说明

  1. NameServer(注册中心)

    • 轻量级无状态服务,必须集群部署(2~3 台)
    • 作用:Broker 注册、路由发现、心跳检测
    • 无主从、无选举,随便挂一台不影响整体
  2. Broker(消息存储核心)

    • 真正负责消息收发、持久化、高可用
    • 生产必须:主从架构(Master-Slave)
    • 支持异步刷盘 + 异步复制(性能最高)
    • 支持同步双写(金融级可靠性)
  3. 生产者 / 消费者

    • 都是客户端集群,无状态,可随意扩容
    • 通过 NameServer 自动发现 Broker

二、生产环境推荐部署规格

最小高可用集群(最常用)

  • NameServer:2 台(2C4G)
  • Broker:2 主 2 从(4 台,4C8G+SSD)
    • broker1-master + broker1-slave
    • broker2-master + broker2-slave

中型集群(业务量较大)

  • NameServer:3 台
  • Broker:3 主 3 从(6 台)

磁盘必须用SSD,机械盘会导致严重性能瓶颈。


三、部署步骤(生产可直接照做)

环境准备

  • Linux(CentOS 7+/Ubuntu 20+)
  • JDK 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 内存(非常重要)

默认内存太大,服务器会直接挂!

  1. 修改 NameServer 启动内存
vim bin/runserver.sh

找到:

JAVA_OPT="${JAVA_OPT} -server -Xms4g -Xmx4g -Xmn2g"

改为:

JAVA_OPT="${JAVA_OPT} -server -Xms512m -Xmx512m -Xmn256m"
  1. 修改 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.10:broker1-master
  • 192.168.1.11:broker1-slave
  • 192.168.1.12:broker2-master
  • 192.168.1.13:broker2-slave
  • NameServer:192.168.1.20, 192.168.1.21

1)配置 broker1-master
mkdir -p /data/rocketmq/store mkdir -p /data/rocketmq/logs vim conf/broker.conf

写入:

properties

brokerClusterName = DefaultCluster brokerName = broker1 brokerId = 0 # 0=master deleteWhen = 04 fileReservedTime = 48 brokerRole = ASYNC_MASTER # 异步主(高性能) flushDiskType = ASYNC_FLUSH # 异步刷盘 listenPort=10911 namesrvAddr=192.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-slave

properties

brokerClusterName = DefaultCluster brokerName = broker1 brokerId = 1 # 非0=slave deleteWhen = 04 fileReservedTime = 48 brokerRole = SLAVE # 从节点 flushDiskType = ASYNC_FLUSH listenPort=10911 namesrvAddr=192.168.1.20:9876;192.168.1.21:9876 storePathRootDir=/data/rocketmq/store ...

3)broker2-master 和 broker2-slave
  • brokerName = broker2
  • brokerId=0/master,brokerId=1/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; }

五、生产环境关键配置(必看)

  1. brokerRole = ASYNC_MASTER(高性能)
  2. flushDiskType = ASYNC_FLUSH(高性能)
  3. 金融级可用:
    • brokerRole = SYNC_MASTER
    • flushDiskType = SYNC_FLUSH
  4. 磁盘保留 48 小时
  5. 开启自动删除过期文件

六、集群检查命令

# 查看集群状态 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 地址即可自动负载
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/27 18:19:15

3步轻松清理重复图片:AntiDupl.NET开源工具的完整指南

3步轻松清理重复图片:AntiDupl.NET开源工具的完整指南 【免费下载链接】AntiDupl A program to search similar and defect pictures on the disk 项目地址: https://gitcode.com/gh_mirrors/an/AntiDupl 你是否曾为电脑中堆积如山的重复图片而烦恼&#xff…

作者头像 李华
网站建设 2026/5/27 18:19:03

【无标题】趣味评测公众号小程序双端管理系统

微擎评测系统核心功能解析 前端交互设计 首页支持幻灯片、热门测评、热度排行自定义配置,提升用户点击率。 答题流程极简化,微信内直接参与,无需下载额外应用。 结果页按分数段输出差异化文案,内置分享功能促进社交裂变。 后台管理…

作者头像 李华
网站建设 2026/5/27 18:16:40

掌握Macy.js:打造完美响应式瀑布流布局的5个核心技巧

掌握Macy.js:打造完美响应式瀑布流布局的5个核心技巧 【免费下载链接】macy.js 项目地址: https://gitcode.com/gh_mirrors/ma/macy.js 在当今多设备并存的Web开发环境中,创建优雅的响应式瀑布流布局已成为前端开发者的必备技能。Macy.js作为一款…

作者头像 李华
网站建设 2026/5/27 18:16:32

三步获取中小学电子课本PDF:告别在线预览的终极解决方案

三步获取中小学电子课本PDF:告别在线预览的终极解决方案 【免费下载链接】tchMaterial-parser 国家中小学智慧教育平台 电子课本下载工具,帮助您从智慧教育平台中获取电子课本的 PDF 文件网址并进行下载,让您更方便地获取课本内容。 项目地…

作者头像 李华
网站建设 2026/5/27 18:16:10

绝区零自动化助手终极指南:3步配置解放双手,轻松享受游戏乐趣

绝区零自动化助手终极指南:3步配置解放双手,轻松享受游戏乐趣 【免费下载链接】ZenlessZoneZero-OneDragon 绝区零 一条龙 | 全自动 | 自动闪避 | 自动每日 | 自动空洞 | 支持手柄 项目地址: https://gitcode.com/gh_mirrors/ze/ZenlessZoneZero-OneDr…

作者头像 李华