1. 环境准备与RocketMQ简介
在开始部署RocketMQ之前,我们先来了解一下这个强大的消息中间件。RocketMQ是阿里巴巴开源的一款分布式消息队列系统,后来捐赠给了Apache基金会,成为顶级项目。它具备高吞吐量、低延迟、高可用性等特点,特别适合在金融、电商等对消息可靠性要求高的场景中使用。
对于Linux环境的选择,我推荐使用CentOS 7.x或者Ubuntu 18.04 LTS及以上版本,这些系统稳定性好,社区支持完善。硬件配置方面,虽然RocketMQ可以在1-2GB内存的机器上运行,但生产环境建议至少4GB内存。我这里以CentOS 7为例进行演示。
首先需要确保系统已经安装了必要的依赖:
yum install -y java-1.8.0-openjdk-devel unzip wgetJava环境是RocketMQ运行的基础,建议使用JDK 1.8版本,这是经过大量生产验证最稳定的版本。安装完成后可以通过以下命令验证:
java -version2. RocketMQ安装与配置
2.1 下载与解压
目前RocketMQ最新稳定版本是4.9.4,我们可以直接从官网下载:
wget https://archive.apache.org/dist/rocketmq/4.9.4/rocketmq-all-4.9.4-bin-release.zip unzip rocketmq-all-4.9.4-bin-release.zip -d rocketmq cd rocketmq解压后的目录结构非常重要,这里简单说明几个关键目录:
- bin/:存放各种可执行脚本
- conf/:配置文件目录
- lib/:依赖的jar包
- logs/:运行日志(首次运行后生成)
2.2 内存参数调优
对于内存有限的服务器,调整JVM参数是必须的。打开bin/runserver.sh:
vi bin/runserver.sh找到JAVA_OPT这一行,修改为:
JAVA_OPT="${JAVA_OPT} -server -Xms128m -Xmx128m -Xmn64m"同样修改broker的内存配置(bin/runbroker.sh):
JAVA_OPT="${JAVA_OPT} -server -Xms256m -Xmx256m -Xmn128m"这里解释下这些参数的含义:
- -Xms:初始堆大小
- -Xmx:最大堆大小
- -Xmn:年轻代大小
- -server:以服务端模式运行,会进行更多优化
2.3 配置Broker
编辑conf/broker.conf文件,添加以下基本配置:
brokerClusterName = DefaultCluster brokerName = broker-a brokerIP1 = 你的服务器IP autoCreateTopicEnable = true这里有几个关键点需要注意:
- brokerIP1必须设置为服务器的真实IP,不能是127.0.0.1
- autoCreateTopicEnable=true表示自动创建Topic,开发环境可以开启,生产环境建议关闭
- 如果服务器有多个网卡,需要明确指定使用的IP
3. 启动RocketMQ服务
3.1 启动NameServer
NameServer是RocketMQ的注册中心,负责管理Broker的路由信息。启动命令很简单:
nohup sh bin/mqnamesrv &查看启动日志确认是否成功:
tail -f ~/logs/rocketmqlogs/namesrv.log看到"The Name Server boot success"表示启动成功。
3.2 启动Broker
Broker是真正存储和转发消息的组件,启动时需要指定NameServer地址:
nohup sh bin/mqbroker -n localhost:9876 -c conf/broker.conf &检查Broker日志:
tail -f ~/logs/rocketmqlogs/broker.log看到"boot success"字样表示启动成功。这里有个常见问题:如果Broker启动后很快退出,很可能是内存不足,需要进一步调低JVM参数。
3.3 验证服务状态
可以通过以下命令查看进程:
ps -ef | grep mq应该能看到NameServer和Broker两个进程。
4. 安装可视化控制台
4.1 下载与编译
RocketMQ官方提供了一个可视化控制台项目,需要从GitHub下载:
wget https://github.com/apache/rocketmq-dashboard/archive/refs/tags/rocketmq-dashboard-1.0.0.zip unzip rocketmq-dashboard-1.0.0.zip cd rocketmq-dashboard-1.0.04.2 修改配置
编辑application.properties文件:
vi src/main/resources/application.properties主要修改以下配置:
rocketmq.config.namesrvAddr=你的NameServer地址:9876 server.port=80804.3 编译打包
使用Maven进行打包:
mvn clean package -Dmaven.test.skip=true这个过程可能会花费几分钟时间,取决于你的服务器性能。
4.4 启动控制台
打包完成后,进入target目录启动:
nohup java -jar rocketmq-dashboard-1.0.0.jar &查看启动日志:
tail -f nohup.out看到"Started Application in x seconds"表示启动成功。
5. 使用可视化控制台
5.1 访问控制台
在浏览器中输入:
http://你的服务器IP:8080就能看到RocketMQ控制台的登录界面,默认用户名密码都是admin。
5.2 主要功能
控制台提供了丰富的功能:
- 集群监控:查看NameServer和Broker的状态
- Topic管理:创建、删除、查询Topic
- 消息查询:按照Topic、Message ID等条件查询消息
- 消费者组:监控消费者组的消费进度
- 消息轨迹:追踪消息的完整生命周期
5.3 常见问题排查
在使用过程中可能会遇到以下问题:
- 控制台无法连接NameServer:检查防火墙是否开放了9876端口
- Broker显示不健康:可能是内存不足,需要调整JVM参数
- 消息堆积:在"消费者"页面可以查看消费延迟情况
6. 生产环境建议
经过基础部署后,如果要用于生产环境,还需要考虑以下方面:
6.1 高可用配置
生产环境建议至少部署:
- 2个NameServer实例
- 主从Broker集群(至少1主1从)
6.2 性能调优
根据实际负载调整以下参数:
- sendMessageThreadPoolNums:发送消息线程数
- pullMessageThreadPoolNums:拉取消息线程数
- flushDiskType:刷盘方式(ASYNC_FLUSH性能更好但可能丢数据)
6.3 监控告警
建议集成Prometheus和Grafana进行监控,主要关注指标:
- 消息堆积量
- 发送/消费TPS
- 系统负载
我在实际项目中遇到过因为没监控消息堆积导致的服务故障,后来设置了当堆积超过1万条时自动告警,问题就很少发生了。