当前位置: 首页 > news >正文

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 地址即可自动负载
http://www.jsqmd.com/news/898244/

相关文章:

  • Falcon-OCR布局分析实战:两阶段文档解析管道完全指南
  • PyTorch 报错 RuntimeError: CUDA error: no kernel image is available for execution on the device 的深度诊断与
  • 强化学习实战:从马尔科夫决策过程到策略迭代的算法实现
  • AI大模型预训练与微调技术全流程实战解析
  • 使用Node.js和Taotoken为前端应用构建一个轻量级AI对话代理接口
  • 广东公园景观雕塑服务商排行及选型核心参考 - 奔跑123
  • UVa 309 FORCAL
  • BPT-V中的视觉地狱:如何应对遮挡、噪声和干扰的终极挑战
  • 基于HCI烧入与nMOS主导的极低误码率SRAM PUF设计解析
  • 独立开发者如何利用Token Plan套餐以更优价格获取充足算力
  • Claude Code 装了一堆 Skill,用了三个月,我删掉了 80%
  • 融合滑模控制与Lyapunov理论的深度强化学习控制框架设计与实践
  • 基于TypeScript构建AI代理网关:统一LLM调用、智能缓存与监控
  • 【Linux系统】线程互斥
  • 2026年度防爆配电箱TOP5厂家:综合实力、定制周期、售后服务全解析 - 深度智识库
  • JavaQuestPlayer:终极跨平台QSP游戏引擎解决方案
  • 微软 Defender 新增自动隔离功能:智能遏制网络攻击的双刃剑
  • Viking-33B完全指南:北欧语言AI模型的终极入门教程
  • Python学习第46天:Django快速上手
  • InsForge A/B测试:功能发布与数据驱动决策的终极指南
  • 5个场景告诉你,为什么你需要这个跨平台资源下载神器
  • gpt2-small-portuguese模型深度解析:124M参数如何实现37.99%准确率?
  • API密钥管理与访问控制功能如何助力企业安全合规使用大模型
  • RFID防碰撞协议优化:位窗技术如何实现节能与提速
  • JAVA8之 时区核心类ZoneId深度解析:从源码到实战应用
  • 2027主管护师哪家机构押题准?3家机构大盘点附实测排名 - 医考机构品牌测评专家
  • ChatGPT角色设定不是写故事!——基于LLM注意力机制的8项可量化评估指标(附Python自动化检测脚本)
  • 25+初老肌选什么面霜?2026年测评:主打淡化细纹提亮,适配全肤质抗初老 - 资讯焦点
  • Agent Skills生产级Skills 案例实操-周红伟
  • AtlasOS:开源Windows优化工具完全指南 - 让电脑运行速度提升60%