Linux 安装 RocketMQ 单机实例
大纲
RocketMQ 单机部署
RocketMQ 集群部署
前言
本文将介绍如何在 Linux 上安装单机版的 RocketMQ,包括 RocketMQ 服务端和 RocketMQ 控制台,适用于 CentOS / Debian / Ubuntu 等 Linux 发行版。
学习资源
版本说明
| 组件 | 版本 | 说明 |
|---|---|---|
| RocketMQ Server | 4.9.0 | RocketMQ 服务端(包括 NameServer 和 Broker),运行时依赖 JDK 1.8+,NameServer 默认监听 9876 端口,Broker 默认监听 10911 端口 |
| RocketMQ Console | 1.0.0 | RocketMQ 控制台,编译源码时依赖 JDK 1.7,运行时依赖 JDK 1.7+,默认监听 8080 端口 |
RocketMQ 服务端安装
创建用户
特别注意
本文所有命令默认都是在 rocketmq 用户权限下执行,除了特别说明除外(比如 sudo xxxx 命令)。
- 创建用户组
1 | sudo groupadd rocketmq |
- 创建用户(禁止登录)
1 | sudo useradd -g rocketmq -m -s /sbin/nologin rocketmq |
- 切换用户
1 | sudo -u rocketmq -s |
准备工作
版本说明
RocketMQ 的服务端(4.9.0 版本)包含两个服务,分别是 NameServer 和 Broker 服务,这两个服务都需要单独启动,且运行时都依赖 JDK 1.8+。
JDK 手动安装
- 下载并安装 JDK(
1.8版本)
1 | # 下载文件(OpenJDK 1.8,Azul Zulu 发行版) |
全局环境变量配置
- 配置系统环境变量
1 | # 编辑系统配置文件,在文件末尾添加以下内容 |
1 | export JAVA_HOME=/usr/local/jdk-1.8.0_402 |
- 让系统环境变量生效
1 | sudo source /etc/profile |
用户环境变量配置
1 | # 切换至 rocketmq 用户 |
1 | # 编辑用户配置文件,在文件末尾添加以下内容 |
1 | export JAVA_HOME=/usr/local/jdk-1.8.0_402 |
- 让用户环境变量生效
1 | source ~/.bashrc |
验证 JDK 安装
1 | java -version |
软件下载
从 RocketMQ 官网 下载对应版本的二进制压缩包(比如 rocketmq-all-4.9.0-bin-release.zip),如下图所示:

- 安装工具
1 | # CentOS、Fedora |
- 下载文件
1 | wget https://archive.apache.org/dist/rocketmq/4.9.0/rocketmq-all-4.9.0-bin-release.zip |
- 解压文件
1 | # 解压文件 |
配置步骤
更改 NameServer 的 JVM 配置参数
- 编辑
runserver.sh脚本文件,根据物理内存大小修改 NameServer 的 JVM 配置参数
1 | # 编辑 NameServer 的启动脚本文件,更改以下内容 |
1 | JAVA_OPT="${JAVA_OPT} -server -Xms2g -Xmx2g -Xmn1g -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m" |
更改 Broker 的 JVM 配置参数
- 编辑
runbroker.sh脚本文件,根据物理内存大小修改 Broker 的 JVM 配置参数
1 | # 编辑 Broker 的启动脚本文件,更改以下内容 |
1 | JAVA_OPT="${JAVA_OPT} -server -Xms4g -Xmx4g -Xmn2g" |
创建 Broker 的数据存储目录
1 | # 创建 Broker 的数据存储目录(默认是在用户主目录下) |
JVM 参数调优
启动服务
启动 RocketMQ 的 NameServer 服务
- 启动 NameServer
1 | # 进入 RocketMQ 的安装目录 |
- 查看 NameServer 的进程信息
1 | ps -aux|grep namesrv |
- 查看 NameServer 的日志信息
1 | # 查看 NameServer 的日志信息(如下所示) |
1 | 2021-07-05 22:26:29 INFO main - tls.client.keyPassword = null |
启动 RocketMQ 的 Broker 服务
- 启动 Broker
1 | # 进入 RocketMQ 的安装目录 |
- 查看 Broker 的进程信息
1 | ps -aux|grep broker |
- 查看 Broker 的日志信息
1 | # 查看 Broker 的日志信息(如下所示) |
1 | 2021-07-05 22:29:10 INFO main - Try to start service thread:FlushConsumeQueueService started:false lastThread:null |
特别提示
- 在生产环境中,为了系统安全,强烈建议使用普通用户(比如
rocketmq)权限来启动 RocketMQ 的 NameServer 和 Broker 服务。 - 在生产环境中,强烈建议使用 Systemd 或 Supervisor 等进程管理工具来管理 RocketMQ 的 NameServer 和 Broker 服务,以实现进程守护和故障自动重启。
测试服务
- 发送消息
1 | # 进入 RocketMQ 的安装目录 |
1 | SendResult [sendStatus=SEND_OK, msgId=FD34DD838CB900000000000000000B3E129C29453F4427E3A8C403E5, offsetMsgId=AC11000100002A9F00000000000A6035, messageQueue=MessageQueue [topic=TopicTest, brokerName=centos7, queueId=2], queueOffset=749] |
- 接收消息
1 | # 进入 RocketMQ 的安装目录 |
1 | ConsumeMessageThread_19 Receive New Messages: [MessageExt [brokerName=centos7, queueId=2, storeSize=227, queueOffset=749, sysFlag=0, bornTimestamp=1775642031300, bornHost=/192.168.2.127:55462, storeTimestamp=1775642031304, storeHost=/172.17.0.1:10911, msgId=AC11000100002A9F00000000000A6035, commitLogOffset=679989, bodyCRC=1102156316, reconsumeTimes=0, preparedTransactionOffset=0, toString()=Message{topic='TopicTest', flag=0, properties={MIN_OFFSET=0, MAX_OFFSET=750, CONSUME_START_TIME=1775642031306, UNIQ_KEY=FD34DD838CB900000000000000000B3E129C29453F4427E3A8C403E5, CLUSTER=DefaultCluster, WAIT=true, TAGS=TagA}, body=[72, 101, 108, 108, 111, 32, 82, 111, 99, 107, 101, 116, 77, 81, 32, 57, 57, 55], transactionId='null'}]] |
关闭服务
RocketMQ 无论是关闭 NameServer 还是 Broker,都可以使用 bin/mqshutdown 命令。
特别注意
在 RocketMQ 关闭的过程中,通常应该先关闭 Broker,再关闭 NameServer。因为 Broker 的运行依赖向 NameServer 注册路由信息,Producer 和 Consumer 也通过 NameServer 获取 Broker 地址列表;如果先关闭 NameServer,会导致路由获取和更新失败,可能引发生产者发送异常、消费者消费异常以及 Broker 心跳状态不一致等问题,而先关闭 Broker 可以让系统停止接收新消息并完成存量消费,最后再关闭 NameServer 则更安全、规范。
- 关闭 Broker
1 | # 进入 RocketMQ 的安装目录 |
- 关闭 NameServer
1 | # 进入 RocketMQ 的安装目录 |
管理服务
在上述 NameServer 和 Broker 服务都是通过 nohup 命令实现后台运行的,这种方式无法实现进程守护,也不支持开机自动启动和故障自动重启进程。为了解决这些问题,建议使用 Supervisor 对 NameServer 和 Broker 进程进行统一管理,以提升服务的稳定性和可运维性。首先关闭 RocketMQ 服务端,然后安装并启动 Supervisor 服务(如下所示),最后添加相应的 Supervisor 配置文件来管理 NameServer 和 Broker 进程。
准备工作
关闭 RocketMQ 服务端
- 关闭 Broker
1 | # 进入 RocketMQ 的安装目录 |
- 关闭 NameServer
1 | # 进入 RocketMQ 的安装目录 |
Supervisor 安装
- CentOS、Fedora 安装 Supervisor
1 | # 安装 Supervisor |
- Debian、Ubuntu 安装 Supervisor
1 | # 安装 Supervisor |
NameServer 管理
- 创建 Supervisor 配置文件
1 | # 创建配置文件,写入以下配置内容 |
1 | ; 定义一个被 Supervisor 管理的程序,名称为 rocketmq-namesrv |
- 创建 Supervisor 日志目录
1 | # 创建日志目录 |
- 重新加载 Supervisor 配置文件
1 | # 重新读取 Supervisor 配置文件(不会立即生效) |
- NameServer 常用管理命令
1 | # 启动 NameServer |
- NameServer 查看日志信息
1 | # 查看 NameServer 的运行日志信息 |
Broker 管理
- 创建 Supervisor 配置文件
1 | # 创建配置文件,写入以下配置内容 |
1 | ; 定义一个被 Supervisor 管理的程序,名称为 rocketmq-broker |
- 创建 Supervisor 日志目录
1 | # 创建日志目录 |
- 重新加载 Supervisor 配置文件
1 | # 重新读取 Supervisor 配置文件(不会立即生效) |
- Broker 常用管理命令
1 | # 启动 Broker |
- Broker 查看日志信息
1 | # 查看 Broker 的运行日志信息 |
RocketMQ 控制台安装
RocketMQ Dashboard 是 RocketMQ 官方开发的管控利器,为用户提供客户端和应用程序的各种事件、性能的统计信息,支持以可视化工具代替 Topic 配置、Broker 管理等命令行操作,其核心功能如下表所示:
| 面板 | 功能 |
|---|---|
| 运维 | 修改 NamServer 地址;选用 VIPChannel |
| 驾驶舱 | 查看 Broker、Topic 消息量 |
| 集群 | 集群分布,Broker 配置、运行信息 |
| 主题 | 搜索、筛选、删除、更新 / 新增主题,消息路由,发送消息,重置消费位点 |
| 消费者 | 搜索、删除、新增 / 更新消费者组,终端,消费详情,配置 |
| 消息 | 消息记录,死信消息,消息轨迹等消息详情 |
准备工作
RocketMQ 控制台需要通过编译源码的方式来安装,因此需要提前安装 JDK 和 Maven。值得一提的是,RocketMQ 控制台既可以与 NameServer 和 Broker 部署在同一台机器上,也可以独立部署在其他机器上。
JDK 版本说明
RocketMQ 控制台项目(1.0.0 版本)在编译阶段依赖 JDK 1.7(即使用 Java 7 语法和字节码版本进行编译),但在运行阶段兼容 JDK 1.7 及以上版本,因此可以正常运行在 JDK 1.8+ 环境中。
JDK 安装
JDK 手动安装
- 下载并安装 JDK(
1.7版本)
1 | # 下载文件(OpenJDK 1.7,Azul Zulu 发行版) |
全局环境变量配置
- 配置系统环境变量
1 | # 编辑系统配置文件,在文件末尾添加以下内容 |
1 | export JAVA_HOME=/usr/local/jdk-7.0.352 |
- 让系统环境变量生效
1 | sudo source /etc/profile |
用户环境变量配置
1 | # 切换至 rocketmq 用户 |
1 | # 编辑用户配置文件,在文件末尾添加以下内容 |
1 | export JAVA_HOME=/usr/local/jdk-7.0.352 |
- 让用户环境变量生效
1 | source ~/.bashrc |
验证 JDK 安装
1 | java -version |
Maven 安装
Maven 手动安装
- 下载并安装 Maven
1 | # 下载文件 |
全局环境变量配置
- 配置系统环境变量
1 | # 编辑系统配置文件,在文件末尾添加以下内容 |
1 | export MAVEN_HOME=/usr/local/maven-3.6.0 |
- 让系统环境变量生效
1 | sudo source /etc/profile |
用户环境变量配置
1 | # 切换至 rocketmq 用户 |
1 | # 编辑用户配置文件,在文件末尾添加以下内容 |
1 | export MAVEN_HOME=/usr/local/maven-3.6.0 |
- 让用户环境变量生效
1 | source ~/.bashrc |
验证 Maven 安装
1 | mvn -version |
软件下载
从 RocketMQ 官方的 GitHub Tags 下载控制台的源代码压缩包(比如 rocketmq-console-1.0.0.zip),如下图所示:

- 下载文件
1 | wget https://github.com/apache/rocketmq-externals/archive/refs/tags/rocketmq-console-1.0.0.zip |
- 解压文件
1 | # 解压文件 |
打包项目
- 更改控制台的配置文件
1 | # 编辑控制台的配置文件,更改以下内容 |
1 | # 默认的端口号是 8080,将其更改为一个不常用的端口 |
- 添加 Maven 依赖项(JAXB)
1 | # 编辑控制台的 Maven 配置文件,添加以下内容 |
1 | <dependency> |
JAXB 是什么
JAXB(Java Architechture for Xml Binding)用于 XML 绑定的 Java 技术,是一个业界标准,是一项可以根据 XML Schema 生成 Java 类的技术。
- Maven 打包控制台项目
1 | # 编译打包控制台项目 |
启动服务
- 启动控制台
1 | # 后台启动控制台 |
测试服务
- 浏览器打开
http://127.0.0.1:7000访问 RocketMQ 的控制台,请自行更改 IP 地址,默认端口号是8080,如下图所示:

管理服务
上述部署的 RocketMQ 控制台是通过 nohup 命令实现后台运行的,这种方式无法实现进程守护,也不支持开机自动启动和故障自动重启进程。为了解决这些问题,建议使用 Supervisor 对 RocketMQ 控制台进程进行统一管理,以提升服务的稳定性和可运维性。首先安装并启动 Supervisor 服务(详细的安装步骤可以参考 这里),然后添加相应的 Supervisor 配置文件来管理 RocketMQ 控制台进程。
- 创建 Supervisor 配置文件
1 | # 创建配置文件,写入以下配置内容 |
1 | ; 定义一个被 Supervisor 管理的程序,名称为 rocketmq-console |
- 创建 Supervisor 日志目录
1 | # 创建日志目录 |
- 重新加载 Supervisor 配置文件
1 | # 重新读取 Supervisor 配置文件(不会立即生效) |
- RocketMQ 控制台常用管理命令
1 | # 启动 RocketMQ 控制台 |
- RocketMQ 控制台查看日志信息
1 | # 查看 RocketMQ 控制台的运行日志信息 |
RocketMQ 的管理工具
在 RocketMQ 的 bin 目录下有一个 mqadmin 管理工具,它是一个运维命令,用于对 RocketMQ 的集群、Topic、Broker 等信息进行管理。
更改 Shell 脚本文件
在运行 mqadmin 命令前,需要先更改 RocketMQ 脚本(bin/tools.sh)中 JDK 的 ext 目录配置,这样可以确保 mqadmin 工具在运行时能够正确加载 JDK 的扩展类库,否则可能导致命令执行异常。可以按如下方式操作:
- (1) 编辑 RocketMQ 安装目录下的
bin/tools.sh脚本; - (2) 找到
JAVA_OPT中的-Djava.ext.dirs配置项; - (3) 在配置项的后面追加本机 JDK 的
ext目录路径(例如:/usr/local/jdk-1.8.0_402/jre/lib/ext); - (4) 保存文件并退出后
编辑 RocketMQ 的 bin/tools.sh 脚本文件,并在 JAVA_OPT 配置的 -Djava.ext.dirs 这一行的后面添加本机 JDK 的 ext 目录路径
1 | # 进入 RocketMQ 的安装目录 |
1 | JAVA_OPT="${JAVA_OPT} -Djava.ext.dirs=${BASE_DIR}/lib:${JAVA_HOME}/jre/lib/ext:${JAVA_HOME}/lib/ext:/usr/local/jdk-1.8.0_402/jre/lib/ext" |
运行 mqadmin 命令
- 直接运行
mqadmin命令后,可以看到其可以添加的 Commands,通过这些 Commands 可以完成很多的功能
1 | # 进入 RocketMQ 的安装目录 |
1 | The most commonly used mqadmin commands are: |
mqadmin 命令的使用教程
mqadmin命令在 RocketMQ 官方文档 中有详细的用法介绍。
