Refinex DevHubRefinex DevHub
DocsBlogProjectsSitesChangelogAbout
Assistant
你好,我可以基于当前页面内容回答问题、提炼重点,或者告诉你下一步应该继续读什么。
  1. Docs›
  2. RocketMQ 安装指南
Overview
Nginx 安装指南
Docker 安装指南
Python 安装指南
Nacos 安装指南
Redis 安装指南
MySQL 安装指南
Maven 安装指南
RocketMQ 安装指南
Homebrew 安装指南
PostgreSQL 安装指南
  1. Docs›
  2. RocketMQ 安装指南

RocketMQ 安装指南

文档信息
  • 适用版本: Apache RocketMQ 5.4.0(2025-12-24 发布)
  • 操作系统: CentOS Stream 9 / RHEL 9(x86_64)
  • 部署方式: Linux 二进制部署(⭐推荐)/ Docker Compose 部署
  • 前置依赖: JDK 1.8+(建议 JDK 17)
  • 官方文档: rocketmq.apache.org

一、RocketMQ 概述

Apache RocketMQ 是阿里巴巴开源的分布式消息与流处理平台,具备低延迟、高性能、高可靠、万亿级容量和灵活可扩展等特性。

1.1 核心特性

  • 丰富的消息类型: 普通消息、顺序消息、延迟/定时消息、事务消息、批量消息
  • 高吞吐低延迟: 万亿级消息容量,毫秒级端到端延迟
  • 云原生架构: 5.0 版本原生支持计算存储分离、弹性扩缩容
  • 流处理引擎: 内置轻量级流计算引擎 RocketMQ Streams
  • 多协议支持: 原生 Remoting/gRPC 协议,兼容 MQTT/AMQP

1.2 5.x 架构组件

组件职责默认端口
NameServer服务发现与路由管理,无状态可集群部署9876
Broker消息存储与投递,核心存储引擎10911(主端口)/ 10909(VIP)/ 10912(HA)
Proxy协议适配层(gRPC/Remoting),5.x 新增8080(gRPC)/ 8081(Remoting)
Dashboard可视化管理控制台8080

1.3 部署模式

模式说明适用场景
Local 模式(⭐推荐)Broker 与 Proxy 合并部署在同一进程单机/小规模生产,延迟最低
Cluster 模式Broker 与 Proxy 分离独立部署大规模集群,需独立扩展 Proxy

1.4 版本选择

版本发布日期说明
5.4.0(当前最新)2025-12-24最新稳定版,本指南基于此版本
5.3.42025-11-26上一个稳定版,RocksDB Pop 消费增强
5.3.22025-03-11长期维护版本
4.9.xLegacy4.x 经典版,无 Proxy 组件

二、环境准备

2.1 系统要求

  • 操作系统: 64 位 Linux(推荐 CentOS Stream 9 / RHEL 9)
  • JDK: 1.8+(推荐 JDK 17,生产环境建议 OpenJDK 17)
  • 内存: NameServer 最低 1GB / Broker 最低 4GB(建议 8GB+)
  • 磁盘: Broker 建议 SSD,预留充足存储空间
  • 网络: 所有节点间网络互通

2.2 检查并安装 JDK

Bash
# 检查 Java 版本
java -version
​
# 如未安装,通过 dnf 安装 OpenJDK 17
sudo dnf install -y java-17-openjdk java-17-openjdk-devel
​
# 验证
java -version
# openjdk version "17.0.x" ...
​
# 配置 JAVA_HOME(如有需要)
echo 'export JAVA_HOME=/usr/lib/jvm/java-17-openjdk' | sudo tee /etc/profile.d/java.sh
echo 'export PATH=$JAVA_HOME/bin:$PATH' | sudo tee -a /etc/profile.d/java.sh
source /etc/profile.d/java.sh

2.3 检查旧版 RocketMQ

Bash
# 检查是否有运行中的 RocketMQ 进程
ps -ef | grep -E '(NamesrvStartup|BrokerStartup|ProxyStartup)' | grep -v grep
​
# 检查是否有 systemd 服务
systemctl list-units --type=service | grep -i rocket
​
# 检查默认端口占用
ss -tlnp | grep -E '(9876|10911|10909|10912|8080|8081)'
​
# 如果存在旧版本,先停止并备份
# --- 停止旧进程 ---
sh /path/to/rocketmq/bin/mqshutdown broker
sh /path/to/rocketmq/bin/mqshutdown namesrv

2.4 创建系统用户和目录

Bash
# 创建 rocketmq 用户(非 root 运行)
# -r 创建系统用户,默认无密码、禁止密码登录
# 切换方式:从 root 用 su - rocketmq(无需密码)
# 如需设置密码(可选):sudo passwd rocketmq
sudo useradd -r -m -s /bin/bash rocketmq
​
# 创建安装目录和数据目录
sudo mkdir -p /opt/rocketmq
sudo mkdir -p /data/rocketmq/{store,logs}
sudo mkdir -p /data/rocketmq/store/{commitlog,consumequeue,index}
​
# 设置目录权限
sudo chown -R rocketmq:rocketmq /opt/rocketmq /data/rocketmq

2.5 防火墙配置

Bash
# 开放 RocketMQ 所需端口
sudo firewall-cmd --permanent --add-port=9876/tcp    # NameServer
sudo firewall-cmd --permanent --add-port=10911/tcp   # Broker 主端口
sudo firewall-cmd --permanent --add-port=10909/tcp   # Broker VIP 通道
sudo firewall-cmd --permanent --add-port=10912/tcp   # Broker HA 端口
sudo firewall-cmd --permanent --add-port=8080/tcp    # Proxy gRPC
sudo firewall-cmd --permanent --add-port=8081/tcp    # Proxy Remoting
sudo firewall-cmd --reload
sudo firewall-cmd --list-ports

三、方式一:Linux 二进制部署(推荐)

推荐理由

直接使用官方预编译二进制包,配合 systemd 管理,运维清晰、性能最优、排障方便。生产环境首选方案。

3.1 下载并解压

Bash
# 切换到 rocketmq 用户
su - rocketmq
​
# 下载 RocketMQ 5.4.0 二进制包
cd /opt/rocketmq
wget https://downloads.apache.org/rocketmq/5.4.0/rocketmq-all-5.4.0-bin-release.zip
​
# 校验 SHA512
wget https://downloads.apache.org/rocketmq/5.4.0/rocketmq-all-5.4.0-bin-release.zip.sha512
# ⚠️ Apache 官方 .sha512 文件格式为 "filename: 大写哈希(空格分隔、多行)"
# 不符合 sha512sum -c 要求的 "小写哈希  文件名" 格式,需转换后校验
​
# 一行命令自动校验(推荐)
echo "$(sed 's/^.*: //' rocketmq-all-5.4.0-bin-release.zip.sha512 | tr -d ' \n' | tr 'A-Z' 'a-z')  rocketmq-all-5.4.0-bin-release.zip" | sha512sum -c -
# 输出 "rocketmq-all-5.4.0-bin-release.zip: OK" 表示校验通过
​
# 手动对比(备选):计算本地哈希,与官方文件肉眼比对
sha512sum rocketmq-all-5.4.0-bin-release.zip
cat rocketmq-all-5.4.0-bin-release.zip.sha512
​
# 解压
unzip rocketmq-all-5.4.0-bin-release.zip
​
# 创建软链接方便版本管理
ln -sf /opt/rocketmq/rocketmq-all-5.4.0-bin-release /opt/rocketmq/current
​
# 验证目录结构
ls -la /opt/rocketmq/current/
# bin/  conf/  lib/  LICENSE  NOTICE  README.md

3.2 配置环境变量

注意

配置文件取决于当前用户使用的 Shell。先确认 Shell 类型再写入对应文件。

Bash
# 确认当前 Shell 类型
echo $SHELL
# /bin/bash  → 写入 ~/.bashrc
# /bin/zsh   → 写入 ~/.zshrc
# /bin/fish  → 写入 ~/.config/fish/config.fish(语法不同)
​
# 查看 rocketmq 用户的登录 Shell
getent passwd rocketmq | cut -d: -f7

Bash(CentOS Stream 9 默认)→ ~/.bashrc:

Bash
cat >> ~/.bashrc << 'EOF'
# RocketMQ
export ROCKETMQ_HOME=/opt/rocketmq/current
export PATH=$ROCKETMQ_HOME/bin:$PATH
export NAMESRV_ADDR=localhost:9876
EOF
​
source ~/.bashrc

Zsh → ~/.zshrc:

Bash
cat >> ~/.zshrc << 'EOF'
# RocketMQ
export ROCKETMQ_HOME=/opt/rocketmq/current
export PATH=$ROCKETMQ_HOME/bin:$PATH
export NAMESRV_ADDR=localhost:9876
EOF
​
source ~/.zshrc

通用方式(所有 Shell 登录时生效)→ /etc/profile.d/:

Bash
# 推荐:写入系统级 profile.d,无需关心具体 Shell 类型
sudo cat > /etc/profile.d/rocketmq.sh << 'EOF'
export ROCKETMQ_HOME=/opt/rocketmq/current
export PATH=$ROCKETMQ_HOME/bin:$PATH
export NAMESRV_ADDR=localhost:9876
EOF
​
sudo chmod +x /etc/profile.d/rocketmq.sh
source /etc/profile.d/rocketmq.sh

3.3 调整 JVM 参数

重要

默认 JVM 配置较大(NameServer 4g,Broker 8g)。请根据服务器内存调整,否则可能因内存不足启动失败。

Bash
# --- NameServer JVM(编辑 bin/runserver.sh)---
vi $ROCKETMQ_HOME/bin/runserver.sh
# 找到 JAVA_OPT 行,根据实际内存调整:
# 生产环境(内存充足):保持默认 -Xms4g -Xmx4g -Xmn2g
# 测试/小内存环境:调整为
# JAVA_OPT="${JAVA_OPT} -server -Xms512m -Xmx512m -Xmn256m"
​
# --- Broker JVM(编辑 bin/runbroker.sh)---
vi $ROCKETMQ_HOME/bin/runbroker.sh
# 找到 JAVA_OPT 行:
# 生产环境(8GB+内存):-Xms8g -Xmx8g -Xmn4g
# 生产环境(4GB内存):-Xms4g -Xmx4g -Xmn2g
# 测试环境:-Xms1g -Xmx1g -Xmn512m

生产环境推荐 JVM 配置(Broker):

Bash
JAVA_OPT="${JAVA_OPT} -server -Xms8g -Xmx8g -Xmn4g"
JAVA_OPT="${JAVA_OPT} -XX:+UseG1GC"
JAVA_OPT="${JAVA_OPT} -XX:G1HeapRegionSize=16m"
JAVA_OPT="${JAVA_OPT} -XX:G1ReservePercent=25"
JAVA_OPT="${JAVA_OPT} -XX:InitiatingHeapOccupancyPercent=30"
JAVA_OPT="${JAVA_OPT} -XX:SoftRefLRUPolicyMSPerMB=0"
JAVA_OPT="${JAVA_OPT} -XX:+AlwaysPreTouch"
JAVA_OPT="${JAVA_OPT} -XX:MaxGCPauseMillis=150"
JAVA_OPT="${JAVA_OPT} -XX:-UseBiasedLocking"

3.4 启动 NameServer

Bash
# 启动 NameServer
nohup sh $ROCKETMQ_HOME/bin/mqnamesrv > /data/rocketmq/logs/namesrv.out 2>&1 &
​
# 验证启动
tail -f ~/logs/rocketmqlogs/namesrv.log
# 看到 "The Name Server boot success. serializeType=JSON" 表示成功
​
# 检查端口
ss -tlnp | grep 9876

3.5 配置 Broker

配置文件位置

$ROCKETMQ_HOME/conf/ 目录下有多种预置配置模板:

  • broker.conf — 单机默认
  • 2m-2s-sync/ — 2主2从同步复制
  • 2m-2s-async/ — 2主2从异步复制
  • 2m-noslave/ — 2主无从
  • dledger/ — DLedger 自动主从切换

创建生产配置文件:

Bash
cat > /data/rocketmq/broker.conf << 'EOF'
# ========================================
# RocketMQ Broker 生产配置
# 配置文件位置: /data/rocketmq/broker.conf
# ========================================
​
# --- 集群配置 ---
brokerClusterName=DefaultCluster
brokerName=broker-a
brokerId=0
# brokerId=0 表示 Master,>0 表示 Slave
​
# --- 网络配置 ---
# brokerIP1 必须为本机网卡上的内网 IP(ip addr 查看)
# 云服务器的公网 IP 是 NAT 映射,不在网卡上,不能用作 brokerIP1
brokerIP1=192.xxx.xxx.141
# 如需外部客户端通过公网访问,设置 brokerIP2 为公网 IP
# brokerIP2=180.xxx.xxx.201
namesrvAddr=localhost:9876
listenPort=10911
​
# --- 存储路径(使用独立数据目录)---
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
​
# --- 存储策略 ---
# 刷盘方式: ASYNC_FLUSH(异步,高性能) / SYNC_FLUSH(同步,高可靠)
flushDiskType=ASYNC_FLUSH
# 主从复制: ASYNC_MASTER(异步) / SYNC_MASTER(同步)
brokerRole=ASYNC_MASTER
​
# --- CommitLog 配置 ---
# 单个 CommitLog 文件大小,默认 1GB
mapedFileSizeCommitLog=1073741824
# ConsumeQueue 每个文件存储的条目数
mapedFileSizeConsumeQueue=300000
​
# --- 消息保留策略 ---
# 文件保留时间(小时),默认 72
fileReservedTime=72
# 删除文件的时间点(凌晨 4 点)
deleteWhen=04
# 磁盘使用率超过此值开始清理,默认 75%
diskMaxUsedSpaceRatio=75
​
# --- Topic 与消费组 ---
# 自动创建 Topic(生产环境建议关闭)
autoCreateTopicEnable=false
# 自动创建消费组
autoCreateSubscriptionGroup=true
# 默认 Topic 队列数
defaultTopicQueueNums=8
​
# --- 线程池配置 ---
sendMessageThreadPoolNums=16
pullMessageThreadPoolNums=32
​
# --- 消息大小限制 ---
# 单条消息最大 4MB
maxMessageSize=4194304
​
# --- 消息轨迹(可选)---
traceTopicEnable=true
​
# --- 事务消息 ---
transactionCheckMax=15
transactionCheckInterval=60000
EOF

3.6 启动 Broker + Proxy(Local 模式)

Bash
# 以 Local 模式启动(Broker + Proxy 合并部署,⭐推荐)
nohup sh $ROCKETMQ_HOME/bin/mqbroker -n localhost:9876 \
  -c /data/rocketmq/broker.conf \
  --enable-proxy \
  > /data/rocketmq/logs/broker.out 2>&1 &
​
# 验证启动
tail -f ~/logs/rocketmqlogs/broker_default.log
# 看到 "The broker[broker-a, ...] boot success." 表示成功
​
# 检查端口
ss -tlnp | grep -E '(10911|8080|8081)'

3.7 验证部署

Bash
# 查看集群信息
sh $ROCKETMQ_HOME/bin/mqadmin clusterList -n localhost:9876
​
# 创建测试 Topic
sh $ROCKETMQ_HOME/bin/mqadmin updateTopic -n localhost:9876 \
  -b localhost:10911 \
  -t TestTopic \
  -r 8 -w 8
​
# 发送测试消息
sh $ROCKETMQ_HOME/bin/tools.sh org.apache.rocketmq.example.quickstart.Producer
​
# 消费测试消息
sh $ROCKETMQ_HOME/bin/tools.sh org.apache.rocketmq.example.quickstart.Consumer
​
# 查看 Topic 列表
sh $ROCKETMQ_HOME/bin/mqadmin topicList -n localhost:9876

3.8 配置 systemd 服务

注意

systemd 服务文件写入 /etc/systemd/system/ 需要 root 权限。请先退出 rocketmq 用户,切回有 sudo 权限的管理员账号(或 root)再执行以下命令。

Text
exit  # 退出 rocketmq 用户
# 或 su - root

NameServer 服务:

Bash
sudo tee /etc/systemd/system/rocketmq-namesrv.service > /dev/null << 'EOF'
[Unit]
Description=Apache RocketMQ NameServer
After=network.target
​
[Service]
Type=simple
User=rocketmq
Group=rocketmq
Environment="JAVA_HOME=/usr/lib/jvm/java-17-openjdk"
Environment="ROCKETMQ_HOME=/opt/rocketmq/current"
ExecStart=/opt/rocketmq/current/bin/mqnamesrv
ExecStop=/opt/rocketmq/current/bin/mqshutdown namesrv
Restart=on-failure
RestartSec=10
LimitNOFILE=65535
LimitNPROC=65535
SuccessExitStatus=143
StandardOutput=append:/data/rocketmq/logs/namesrv.out
StandardError=append:/data/rocketmq/logs/namesrv.err
​
[Install]
WantedBy=multi-user.target
EOF

Broker + Proxy 服务(Local 模式):

Bash
sudo tee /etc/systemd/system/rocketmq-broker.service > /dev/null << 'EOF'
[Unit]
Description=Apache RocketMQ Broker (Local Mode with Proxy)
After=network.target rocketmq-namesrv.service
Requires=rocketmq-namesrv.service
​
[Service]
Type=simple
User=rocketmq
Group=rocketmq
Environment="JAVA_HOME=/usr/lib/jvm/java-17-openjdk"
Environment="ROCKETMQ_HOME=/opt/rocketmq/current"
ExecStart=/opt/rocketmq/current/bin/mqbroker -n 127.0.0.1:9876 -c /data/rocketmq/broker.conf --enable-proxy
ExecStop=/opt/rocketmq/current/bin/mqshutdown broker
Restart=on-failure
RestartSec=15
LimitNOFILE=65535
LimitNPROC=65535
SuccessExitStatus=143
StandardOutput=append:/data/rocketmq/logs/broker.out
StandardError=append:/data/rocketmq/logs/broker.err
​
[Install]
WantedBy=multi-user.target
EOF
Bash
# 重载并启用服务
sudo systemctl daemon-reload
sudo systemctl enable rocketmq-namesrv rocketmq-broker
​
# 先停止手动启动的进程
sh $ROCKETMQ_HOME/bin/mqshutdown broker
sh $ROCKETMQ_HOME/bin/mqshutdown namesrv
​
# 通过 systemd 启动
sudo systemctl start rocketmq-namesrv
sudo systemctl start rocketmq-broker
​
# 检查状态
sudo systemctl status rocketmq-namesrv
sudo systemctl status rocketmq-broker

四、方式二:Docker Compose 部署

4.1 前置要求

  • Docker 20.10+
  • Docker Compose v2+
Bash
# 验证 Docker 版本
docker --version
docker compose version

4.2 创建目录结构

Bash
mkdir -p /opt/rocketmq-docker/{conf,data,logs}
mkdir -p /opt/rocketmq-docker/data/{namesrv,broker}
mkdir -p /opt/rocketmq-docker/logs/{namesrv,broker,proxy}
cd /opt/rocketmq-docker

4.3 Broker 配置文件

Bash
cat > /opt/rocketmq-docker/conf/broker.conf << 'EOF'
brokerClusterName=DockerCluster
brokerName=broker-a
brokerId=0
namesrvAddr=rmqnamesrv:9876
listenPort=10911
# Docker 中必须设置为宿主机 IP(外部客户端访问用)
brokerIP1=192.xxx.xxx.141
storePathRootDir=/home/rocketmq/store
storePathCommitLog=/home/rocketmq/store/commitlog
flushDiskType=ASYNC_FLUSH
brokerRole=ASYNC_MASTER
autoCreateTopicEnable=false
autoCreateSubscriptionGroup=true
defaultTopicQueueNums=8
fileReservedTime=72
deleteWhen=04
EOF

4.4 Docker Compose 配置

YAML
# /opt/rocketmq-docker/docker-compose.yml
version: '3.8'
​
services:
  # NameServer
  rmqnamesrv:
    image: apache/rocketmq:5.4.0
    container_name: rmqnamesrv
    ports:
      - "9876:9876"
    environment:
      JAVA_OPT_EXT: "-server -Xms512m -Xmx512m -Xmn256m"
    command: sh mqnamesrv
    volumes:
      - ./logs/namesrv:/home/rocketmq/logs
      - ./data/namesrv:/home/rocketmq/store
    networks:
      - rocketmq
    restart: unless-stopped
    healthcheck:
      test: ["CMD-SHELL", "nc -z localhost 9876 || exit 1"]
      interval: 10s
      timeout: 5s
      retries: 5
​
  # Broker + Proxy (Local 模式)
  rmqbroker:
    image: apache/rocketmq:5.4.0
    container_name: rmqbroker
    ports:
      - "10911:10911"
      - "10909:10909"
      - "10912:10912"
      - "8080:8080"
      - "8081:8081"
    environment:
      NAMESRV_ADDR: rmqnamesrv:9876
      JAVA_OPT_EXT: "-server -Xms1g -Xmx1g -Xmn512m"
    command: sh mqbroker -c /home/rocketmq/conf/broker.conf --enable-proxy
    volumes:
      - ./conf/broker.conf:/home/rocketmq/conf/broker.conf:ro
      - ./logs/broker:/home/rocketmq/logs
      - ./data/broker:/home/rocketmq/store
    depends_on:
      rmqnamesrv:
        condition: service_healthy
    networks:
      - rocketmq
    restart: unless-stopped
​
  # Dashboard 管理控制台
  rmqdashboard:
    image: apacherocketmq/rocketmq-dashboard:2.1.0
    container_name: rmqdashboard
    ports:
      - "18080:8080"
    environment:
      JAVA_OPTS: "-Drocketmq.namesrv.addr=rmqnamesrv:9876"
    depends_on:
      rmqnamesrv:
        condition: service_healthy
    networks:
      - rocketmq
    restart: unless-stopped
​
networks:
  rocketmq:
    driver: bridge

4.5 启动与验证

Bash
# 启动全部服务
cd /opt/rocketmq-docker
docker compose up -d
​
# 查看容器状态
docker compose ps
​
# 查看 NameServer 日志
docker compose logs -f rmqnamesrv
# 看到 "The Name Server boot success." 即成功
​
# 查看 Broker 日志
docker compose logs -f rmqbroker
# 看到 "The broker[broker-a, ...] boot success." 即成功
​
# 查看集群信息
docker exec -it rmqbroker sh -c 'mqadmin clusterList -n rmqnamesrv:9876'
​
# 访问 Dashboard
# 浏览器打开 http://192.168.1.100:18080

4.6 Docker 常用运维命令

Bash
# 停止全部服务
docker compose down
​
# 停止并删除数据卷(⚠️ 清除所有消息数据)
docker compose down -v
​
# 重启单个服务
docker compose restart rmqbroker
​
# 查看资源使用
docker stats rmqnamesrv rmqbroker rmqdashboard
​
# 进入 Broker 容器
docker exec -it rmqbroker bash
​
# 发送测试消息
docker exec -it rmqbroker sh -c '
  export NAMESRV_ADDR=rmqnamesrv:9876
  tools.sh org.apache.rocketmq.example.quickstart.Producer
'

五、Dashboard 管理控制台

5.1 Docker 安装(最简方式)

已在 Docker Compose 中包含。如需单独安装:

Bash
docker run -d \
  --name rocketmq-dashboard \
  --network host \
  -e "JAVA_OPTS=-Drocketmq.namesrv.addr=127.0.0.1:9876 -Dserver.port=18080" \
  --restart unless-stopped \
  apacherocketmq/rocketmq-dashboard:2.1.0

启动后浏览器访问:

  • 内网访问: http://192.xxx.xxx.141:18080
  • 公网访问: http://180.xxx.xxx.201:18080(需云平台安全组放行 18080 端口)

Dashboard 无需登录,开箱即用。如公网无法访问,检查防火墙和安全组:

Bash
# 服务器防火墙放行
sudo firewall-cmd --permanent --add-port=18080/tcp
sudo firewall-cmd --reload
# 云平台安全组:控制台添加入站规则 TCP 18080

5.2 源码安装

Bash
# 下载源码
git clone https://github.com/apache/rocketmq-dashboard.git
cd rocketmq-dashboard
​
# 修改配置
vi src/main/resources/application.properties
# 设置 rocketmq.config.namesrvAddr=192.xxx.xxx.141:9876
​
# 编译
mvn clean package -Dmaven.test.skip=true
​
# 启动
java -jar target/rocketmq-dashboard-*.jar
# 访问 http://localhost:8080

5.3 Dashboard 功能

功能说明
集群管理查看 NameServer/Broker 节点状态、配置信息
Topic 管理创建/删除/查看 Topic、查看路由信息
消费者管理查看消费组、消费进度、积压情况
生产者管理查看生产者连接信息
消息查询按 Topic/Message ID/Message Key 查询消息内容
消息轨迹追踪消息全生命周期(需开启 traceTopicEnable)

六、核心配置详解

配置文件位置
  • Linux 二进制部署: /data/rocketmq/broker.conf(自定义)或 $ROCKETMQ_HOME/conf/broker.conf
  • Docker 部署: /opt/rocketmq-docker/conf/broker.conf(挂载到容器 /home/rocketmq/conf/broker.conf)
  • JVM 配置: $ROCKETMQ_HOME/bin/runbroker.sh 和 $ROCKETMQ_HOME/bin/runserver.sh

6.1 Broker 核心参数

参数默认值说明
brokerClusterNameDefaultCluster集群名称,同一集群的 Broker 必须一致
brokerNamebroker-aBroker 名称,主从 Broker 需同名
brokerId00=Master,>0 为 Slave
brokerIP1自动检测必须设为实际 IP,多网卡/Docker 必配
namesrvAddr—NameServer 地址,多个用分号分隔
listenPort10911Broker 监听端口
storePathRootDir$HOME/store存储根目录
storePathCommitLog$HOME/store/commitlogCommitLog 存储路径
flushDiskTypeASYNC_FLUSHASYNC_FLUSH(高性能) / SYNC_FLUSH(高可靠)
brokerRoleASYNC_MASTERASYNC_MASTER / SYNC_MASTER / SLAVE
autoCreateTopicEnabletrue生产环境必须设为 false
fileReservedTime72消息文件保留时间(小时)
deleteWhen04过期文件删除时间(凌晨 4 点)
maxMessageSize4MB单条消息最大大小
diskMaxUsedSpaceRatio75磁盘使用率阈值(%),超过开始清理
sendMessageThreadPoolNums1发送消息线程池(建议 16-32)
pullMessageThreadPoolNums32拉取消息线程池

6.2 集群部署模式对比

模式特点配置适用
多 Master 无 Slave无冗余,Master 宕机消息不可消费每个 Broker brokerId=0测试环境
多 Master 多 Slave(异步复制)高吞吐,Master 宕机可能丢少量消息brokerRole=ASYNC_MASTER / SLAVE多数生产场景
多 Master 多 Slave(同步复制)零丢失,性能略低brokerRole=SYNC_MASTER / SLAVE金融级场景
DLedger 模式基于 Raft 自动主从切换使用 conf/dledger/ 模板高可用自动容灾

七、生产环境优化

7.1 Linux 内核参数

配置文件位置

/etc/sysctl.conf 或 /etc/sysctl.d/99-rocketmq.conf

Bash
cat > /etc/sysctl.d/99-rocketmq.conf << 'EOF'
# RocketMQ 生产优化内核参数
​
# 文件描述符
fs.file-max = 655350
​
# 内存映射区域数(RocketMQ 大量使用 mmap)
vm.max_map_count = 655360
​
# 虚拟内存 - 减少 swap 使用
vm.swappiness = 1
​
# 脏页刷写策略
vm.dirty_background_ratio = 5
vm.dirty_ratio = 10
vm.dirty_expire_centisecs = 3000
vm.dirty_writeback_centisecs = 500
​
# 网络优化
net.core.somaxconn = 65535
net.core.netdev_max_backlog = 65535
net.ipv4.tcp_max_syn_backlog = 65535
net.ipv4.tcp_fin_timeout = 15
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_keepalive_time = 600
net.ipv4.tcp_keepalive_intvl = 30
net.ipv4.tcp_keepalive_probes = 3
​
# TCP 缓冲区
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216
net.ipv4.tcp_rmem = 4096 87380 16777216
net.ipv4.tcp_wmem = 4096 65536 16777216
EOF
​
# 生效
sudo sysctl -p /etc/sysctl.d/99-rocketmq.conf

7.2 文件描述符限制

配置文件位置

/etc/security/limits.d/99-rocketmq.conf

Bash
cat > /etc/security/limits.d/99-rocketmq.conf << 'EOF'
rocketmq soft nofile 655350
rocketmq hard nofile 655350
rocketmq soft nproc 655350
rocketmq hard nproc 655350
EOF

7.3 磁盘 I/O 调度器

Bash
# 查看当前调度器
cat /sys/block/sda/queue/scheduler
​
# SSD 推荐 none/noop
echo 'none' | sudo tee /sys/block/sda/queue/scheduler
​
# 持久化(CentOS Stream 9)
echo 'ACTION=="add|change", KERNEL=="sd*", ATTR{queue/scheduler}="none"' | \
  sudo tee /etc/udev/rules.d/60-ioscheduler.rules

7.4 禁用 Swap

Bash
# 临时禁用
sudo swapoff -a
​
# 永久禁用
sudo sed -i 's/^.*swap.*$/#&/' /etc/fstab

八、多 Master 多 Slave 集群部署示例

以 2 Master + 2 Slave(异步复制)为例,假设 4 台服务器:

角色IPbrokerNamebrokerId
NameServer-1192.xxx.xxx.141——
NameServer-2192.168.112.142——
Broker-a Master192.xxx.xxx.141broker-a0
Broker-a Slave192.168.112.142broker-a1
Broker-b Master192.168.112.143broker-b0
Broker-b Slave192.168.112.144broker-b1

broker-a Master 配置 (/data/rocketmq/broker.conf):

JSX
brokerClusterName=ProductionCluster
brokerName=broker-a
brokerId=0
brokerIP1=192.xxx.xxx.141
namesrvAddr=192.xxx.xxx.141:9876;192.168.112.142:9876
listenPort=10911
storePathRootDir=/data/rocketmq/store
storePathCommitLog=/data/rocketmq/store/commitlog
flushDiskType=ASYNC_FLUSH
brokerRole=ASYNC_MASTER
autoCreateTopicEnable=false
fileReservedTime=72
deleteWhen=04

broker-a Slave 配置:

JSX
brokerClusterName=ProductionCluster
brokerName=broker-a
brokerId=1
brokerIP1=192.168.112.142
namesrvAddr=192.xxx.xxx.141:9876;192.168.112.142:9876
listenPort=10911
storePathRootDir=/data/rocketmq/store
storePathCommitLog=/data/rocketmq/store/commitlog
flushDiskType=ASYNC_FLUSH
brokerRole=SLAVE
autoCreateTopicEnable=false
fileReservedTime=72
deleteWhen=04
Bash
# 每台服务器启动 NameServer
nohup sh $ROCKETMQ_HOME/bin/mqnamesrv &
​
# 各 Master/Slave 启动 Broker
nohup sh $ROCKETMQ_HOME/bin/mqbroker \
  -n '192.xxx.xxx.141:9876;192.168.112.142:9876' \
  -c /data/rocketmq/broker.conf \
  --enable-proxy &
​
# 验证集群
sh $ROCKETMQ_HOME/bin/mqadmin clusterList \
  -n '192.xxx.xxx.141:9876;192.168.112.142:9876'

九、mqadmin 运维工具

9.1 常用命令

Bash
# 设置 NameServer 地址
export NAMESRV_ADDR=localhost:9876
​
# ---------- 集群管理 ----------
mqadmin clusterList                           # 查看集群信息
mqadmin brokerStatus -b localhost:10911       # Broker 状态详情
​
# ---------- Topic 管理 ----------
mqadmin updateTopic -b localhost:10911 -t MyTopic -r 8 -w 8   # 创建 Topic
mqadmin topicList                              # 列出所有 Topic
mqadmin topicStatus -t MyTopic                 # 查看 Topic 状态
mqadmin topicRoute -t MyTopic                  # 查看 Topic 路由
mqadmin deleteTopic -c DefaultCluster -t MyTopic  # 删除 Topic
​
# ---------- 消费者管理 ----------
mqadmin consumerProgress -g MyConsumerGroup    # 查看消费进度
mqadmin consumerStatus -g MyConsumerGroup      # 消费者状态
mqadmin consumerConnection -g MyConsumerGroup  # 消费者连接信息
​
# ---------- 消息查询 ----------
mqadmin queryMsgByKey -t MyTopic -k myKey      # 按 Key 查询
mqadmin queryMsgById -i msgId                  # 按消息 ID 查询
mqadmin printMsg -t MyTopic -c true            # 打印 Topic 消息
​
# ---------- 重置消费位点 ----------
mqadmin resetOffsetByTime -g MyGroup -t MyTopic -s '2026-01-01#00:00:00:000'

9.2 配置热更新

Bash
# 查看 Broker 配置
mqadmin getBrokerConfig -b localhost:10911
​
# 动态更新 Broker 配置(无需重启)
mqadmin updateBrokerConfig -b localhost:10911 -k sendMessageThreadPoolNums -v 32

十、监控与告警

10.1 RocketMQ Exporter + Prometheus

Bash
# 下载 RocketMQ Exporter
git clone https://github.com/apache/rocketmq-exporter.git
cd rocketmq-exporter
​
# 编译
mvn clean package -Dmaven.test.skip=true
​
# 启动
java -jar target/rocketmq-exporter-*.jar \
  --rocketmq.config.namesrvAddr=localhost:9876
# 默认监听 5557 端口,暴露 /metrics

Prometheus 配置:

YAML
scrape_configs:
  - job_name: 'rocketmq'
    static_configs:
      - targets: ['192.168.1.100:5557']
    scrape_interval: 15s

10.2 关键监控指标

指标说明告警阈值建议
rocketmq_broker_tpsBroker TPS根据基线设定
rocketmq_consumer_message_accum消费积压量> 10000 告警
rocketmq_broker_commitlog_disk_ratioCommitLog 磁盘使用率> 70% 告警
rocketmq_producer_fail_total生产失败总数> 0 告警
rocketmq_group_consume_latency消费延迟> 1000ms 告警

十一、常见问题排查

11.1 启动失败

问题原因解决
内存不足 Cannot allocate memoryJVM 堆内存设置过大调小 runbroker.sh 中 -Xms -Xmx
端口被占用其他进程占用 9876/10911`ss -tlnp \
connect to <ip>:9876 failedNameServer 未启动或防火墙检查 NameServer 状态及防火墙规则
权限不足非 rocketmq 用户运行确保数据目录权限正确

11.2 消息发送失败

问题原因解决
No route info of this topicTopic 不存在或路由未同步手动创建 Topic 或等待路由同步
SLAVE_NOT_AVAILABLESlave 未启动检查 Slave Broker 状态
broker busyBroker 负载过高扩容或优化线程池配置

11.3 消费异常

问题原因解决
消费积压持续增长消费速度 < 生产速度增加消费者实例 / 增加队列数
重复消费消费者重启或 Rebalance业务层实现幂等
消费组不存在未自动创建且未手动创建mqadmin updateSubGroup 创建

11.4 日志位置

日志文件位置
  • NameServer 日志: ~/logs/rocketmqlogs/namesrv.log
  • Broker 日志: ~/logs/rocketmqlogs/broker_default.log
  • 存储相关: ~/logs/rocketmqlogs/store.log
  • Proxy 日志: ~/logs/rocketmqlogs/proxy.log
  • GC 日志: ~/logs/rocketmqlogs/broker_gc.log

十二、安全配置

12.1 ACL 访问控制

配置文件位置

$ROCKETMQ_HOME/conf/plain_acl.yml

YAML
# $ROCKETMQ_HOME/conf/plain_acl.yml
globalWhiteRemoteAddresses:
  - 10.10.103.*
  - 192.168.0.*
​
accounts:
  - accessKey: RocketMQ_Admin
    secretKey: 12345678_CHANGE_ME
    whiteRemoteAddress:
    admin: true
​
  - accessKey: RocketMQ_Producer
    secretKey: ProducerPass_CHANGE_ME
    whiteRemoteAddress:
    admin: false
    defaultTopicPerm: PUB
    topicPerms:
      - MyTopic=PUB
​
  - accessKey: RocketMQ_Consumer
    secretKey: ConsumerPass_CHANGE_ME
    whiteRemoteAddress:
    admin: false
    defaultTopicPerm: SUB
    defaultGroupPerm: SUB
    groupPerms:
      - MyConsumerGroup=SUB

在 broker.conf 中启用:

Text
aclEnable=true

12.2 TLS 加密传输

Bash
# 在 broker.conf 中配置
tlsTestModeEnable=false
tlsEnable=true
tlsConfigFile=/data/rocketmq/tls.properties

十三、停止与卸载

13.1 优雅停止

Bash
# 先停 Broker,再停 NameServer
sh $ROCKETMQ_HOME/bin/mqshutdown broker
sh $ROCKETMQ_HOME/bin/mqshutdown namesrv
​
# 或通过 systemd
sudo systemctl stop rocketmq-broker
sudo systemctl stop rocketmq-namesrv
​
# Docker 停止
docker compose down

13.2 完全卸载

Bash
# 停止服务
sudo systemctl stop rocketmq-broker rocketmq-namesrv
sudo systemctl disable rocketmq-broker rocketmq-namesrv
​
# 删除 systemd 服务文件
sudo rm -f /etc/systemd/system/rocketmq-*.service
sudo systemctl daemon-reload
​
# 删除安装和数据目录
sudo rm -rf /opt/rocketmq
sudo rm -rf /data/rocketmq
​
# 删除用户日志
sudo rm -rf /home/rocketmq/logs
​
# 删除系统用户
sudo userdel -r rocketmq
​
# 清理环境变量
sudo rm -f /etc/profile.d/rocketmq.sh
​
# 清理内核参数
sudo rm -f /etc/sysctl.d/99-rocketmq.conf
sudo rm -f /etc/security/limits.d/99-rocketmq.conf
sudo sysctl --system

十四、快速参考

默认端口

端口组件用途
9876NameServer服务发现
10911Broker主端口(客户端连接)
10909BrokerVIP 通道
10912BrokerHA 主从复制
8080ProxygRPC 协议端口
8081ProxyRemoting 协议端口
8080DashboardWeb 管理界面(建议映射到 18080)

关键路径速查

路径说明
/opt/rocketmq/current/RocketMQ 安装目录(软链接)
/opt/rocketmq/current/bin/启动脚本、运维工具
/opt/rocketmq/current/conf/预置配置模板目录
/data/rocketmq/broker.conf自定义 Broker 配置
/data/rocketmq/store/消息存储数据目录
/data/rocketmq/store/commitlog/CommitLog 物理消息文件
/data/rocketmq/store/consumequeue/逻辑消费队列索引
~/logs/rocketmqlogs/运行日志目录

常用命令速查

Bash
# ===== 启停服务 =====
sudo systemctl start rocketmq-namesrv       # 启动 NameServer
sudo systemctl start rocketmq-broker         # 启动 Broker+Proxy
sudo systemctl stop rocketmq-broker          # 停止 Broker
sudo systemctl status rocketmq-namesrv       # 查看状态
​
# ===== 集群运维 =====
mqadmin clusterList -n localhost:9876        # 查看集群
mqadmin topicList -n localhost:9876          # 查看 Topic
mqadmin consumerProgress -g <group>          # 消费进度
​
# ===== 日志查看 =====
tail -f ~/logs/rocketmqlogs/namesrv.log      # NameServer 日志
tail -f ~/logs/rocketmqlogs/broker_default.log  # Broker 日志
← 上一篇
下一篇 →
一、RocketMQ 概述1.1 核心特性1.2 5.x 架构组件1.3 部署模式1.4 版本选择二、环境准备2.1 系统要求2.2 检查并安装 JDK2.3 检查旧版 RocketMQ2.4 创建系统用户和目录2.5 防火墙配置三、方式一:Linux 二进制部署(推荐)3.1 下载并解压3.2 配置环境变量3.3 调整 JVM 参数3.4 启动 NameServer3.5 配置 Broker3.6 启动 Broker + Proxy(Local 模式)3.7 验证部署3.8 配置 systemd 服务四、方式二:Docker Compose 部署4.1 前置要求4.2 创建目录结构4.3 Broker 配置文件4.4 Docker Compose 配置4.5 启动与验证4.6 Docker 常用运维命令五、Dashboard 管理控制台5.1 Docker 安装(最简方式)5.2 源码安装5.3 Dashboard 功能六、核心配置详解6.1 Broker 核心参数6.2 集群部署模式对比七、生产环境优化7.1 Linux 内核参数7.2 文件描述符限制7.3 磁盘 I/O 调度器7.4 禁用 Swap八、多 Master 多 Slave 集群部署示例九、mqadmin 运维工具9.1 常用命令9.2 配置热更新十、监控与告警10.1 RocketMQ Exporter + Prometheus10.2 关键监控指标十一、常见问题排查11.1 启动失败11.2 消息发送失败11.3 消费异常11.4 日志位置十二、安全配置12.1 ACL 访问控制12.2 TLS 加密传输十三、停止与卸载13.1 优雅停止13.2 完全卸载十四、快速参考默认端口关键路径速查常用命令速查