1. 概述
1.1 编写目的
本文介绍了RocketMq的部署步骤、运行步骤以及Afa中RocketMq接入接出的配置说明以及组件使用说明,主要应用于使用RocketMq进行消息发送以及消费的场景。
1.2 名词解释
|
术语和缩写 |
解释 |
备注 |
|
nameServer |
专门为RocketMQ设计的轻量级名称服务 |
|
|
producer |
消息生产者,负责生产消息,一般由业务系统负责生产休息 |
|
|
Consumer |
消息消费者,负责消费消息,一般是后台系统负责异步消息 |
|
|
Broker |
消息中转角色,负责存储消息,转发消息 |
|
|
Master |
Broker中的主节点 |
|
|
Slave |
Broker中的副节点 |
|
|
异步复制 |
消息写入master节点,再由master节点异步复制到slave节点 |
|
|
同步双写 |
消息同时写入master节点和slave节点 |
|
|
异步刷盘 |
Broker的一种持久化策略,消息写入pagecache后,直接返回。由异步线程直接将pagecache写入硬盘 |
|
|
同步刷盘 |
Broker的一种持久化策略,消息写入pagecache后,由同步线程将pagecache写入硬盘后在返回。 |
|
|
Tps |
每秒发送消息个数 |
|
1.3 参考资料
|
参考文件 |
备注 |
|
|
|
|
|
|
|
|
|
|
|
|
2 安装部署
2.1 硬件环境
Cpu8核、内存12g、硬盘1t
2.2 软件环境
1. linux系统
2. jdk1.8或以上版本 64位
3. Maven 3.x
2.3 安装部署
2.3.1 单机部署
1、 查看JAVA环境
(1) 输入命令 java -version
(2) 显示Jdk版本
Java(TM) SE Runtime Environment (build 1.8.0_111-b14)
Java HotSpot(TM) 64-Bit Server VM (build 25.111-b14, mixed mode)
(3) 如果jdk版本不低于1.8则继续下一步,如果低于1.8则需要安装jdk1.8或以上版本
2、 下载rocketmq
可通过命令wget http://mirrors.hust.edu.cn/apache/rocketmq/4.2.0/rocketmq-all-4.2.0-bin-release.zip下载
3、 解压rocketmq
输入命令 unzip rocketmq-all-4.2.0-bin-release.zip -d ./rocketmq
可将rocketmq解压到当前目录的rocketmq文件夹内
4、 创建存储路径
依次输入命令
|
mkdir -p /usr/local/rocketmq/store mkdir -p /usr/local/rocketmq/store/commitlog mkdir -p /usr/local/rocketmq/store/consumequeue mkdir -p /usr/local/rocketmq/store/index |
5、 配置RocketMq环境变量
RockeMq一般部署于非root用户下,vi /home/${user}/.bash_profile,添加如下内容:
|
export ROCKETMQ_HOME=~/rocketmq export NAMESRV_ADDR=0.0.0.0:9876
|
6、 设置broker配置
(1)输入命令创建配置
|
vi rocketmq/conf/default-broker.properties |
(2)输入内容:
|
namesrvAddr=ip:port; messageIndexSafe=true autoCreateTopicEnable=true waitTimeMillsInSendQueue=5000 sendMessageThreadPoolNums=64 useReentrantLockWhenPutMessage=true defaultReadQueueNums = 16 defaultWriteQueueNums = 16 brokerIP1=ip brokerClusterName=clusterName brokerName=brokerName brokerId=0 deleteWhen=04 fileReservedTime=48 brokerRole=ASYNC_MASTER flushDiskType=ASYNC_FLUSH listenPort=port storePathRootDir=/usr/local/rocketmq/store storePathCommitLog= /usr/local/rocketmq/store/commitlog storePathConsumeQueue=/usr/local/rocketmq/store/consumequeue storePathIndex=/usr/local/rocketmq/store/index |
注意:storePathRootDir、storePathCommitLog、storePathConsumeQueue、storePathIndex这4个路径的设置要与第4步创建的存储路径一致。
以上内容中部分值需要根据实际情况修改,详情如下:
|
参数 |
原始值 |
修改值说明 |
|
namesrvAddr |
ip:port |
ip设置实际ip,port可自由设置,一般设置9876 |
|
brokerIP1 |
ip |
ip设置外网ip,不需要连接外网的话,可以在参数前面加#注释掉 |
|
listenPort |
port |
port可自由设置,一般设置10911 |
|
brokerName |
本机主机名 |
Broker名称 |
|
brokerClusterName |
DefaultCluster |
Broker 所属哪个集群 |
|
brokerId |
0 |
BrokerId,必须是大等于 0 的整数,0 表示Master,>0 表示 Slave,一个 Master 可以挂多个 Slave,Master 与 Slave 通过 BrokerName 来配对 |
|
brokerPermission |
0x4|0x2 |
broker读写权限 |
|
defaultTopicQueueNums |
8 |
默认topic读写队列数 |
|
autoCreateTopicEnable |
TRUE |
是否允许Broker 自动创建 Topic,建议线下开启,线上关闭 |
|
clusterTopicEnable |
true |
是否启用集群topic |
|
brokerTopicEnable |
true |
是否启用brokertopic |
|
autoCreateSubscriptionGroup |
TRUE |
是否允许Broker 自动创建订阅组,建议线下开启,线上关 闭 |
|
sendMessageThreadPoolNums |
1 |
发送消息线程池数量 |
|
storePathConsumeQueue |
$HOME/store/consumequeue |
消费队列存储路径 |
|
storePathIndex |
$HOME/store/index |
消息索引存储路径 |
|
storeCheckpoint |
$HOME/store/checkpoint |
checkpoint 文件存储路径 |
|
abortFile |
$HOME/store/abort |
abort 文件存储路径 |
|
fileReservedTime |
48 |
文件保留时间,默认 48 小时 |
|
brokerRole |
ASYNC_MASTER |
Broker 的角色 -异步复制 Master: ASYNC_MASTER Slave: SLAVE -同步双写 Master: SYNC_MASTER Slave: SLAVE |
|
flushDiskType |
ASYNC_FLUSH |
刷盘方式
-SYNC_FLUSH 同步刷盘 |
|
deleteWhen |
04 |
删除文件时间点,默认凌晨 4 点 |
|
defaultReadQueueNums |
16 |
创建Topic中默认的读队列数量 |
|
defaultWriteQueueNums |
16 |
创建Topic中默认的写队列数量 |
(3)最后按esc键,输入:wq保存配置
7、 修改启动脚本参数
|
vi bin/runbroker.sh JAVA_OPT="${JAVA_OPT} -server -Xms1g -Xmx1g -Xmn512m -XX:PermSize=128m -XX:MaxPermSize=320m"
vi bin/runserver.sh JAVA_OPT="${JAVA_OPT} -server -Xms1g -Xmx1g -Xmn512m -XX:PermSize=128m -XX:MaxPermSize=320m" |
注意:Xms和Xmx至少是1G 否则启动不起来 Xmn一般是前者的一半,这边设置的内存不能大于机器实际的内存,根据实际情况调整。
8、 启动NameSrv
|
nohup sh bin/mqnamesrv & |
9、 启动broker
|
nohup sh mqbroker -c conf/default-broker.properties & |
10、 停止broker
其中default-broker.properties为上面第5步设置的broker配置文件名
|
sh mqshutdown broker |
11、 停止namesrv
|
sh mqshutdown namesrv |
12、验证
(1)启动namesrv和broker
|
nohup sh bin/mqnamesrv & |
|
nohup sh mqbroker -c conf/default-broker.properties & |
(2)在ROCKETMQ_HOME路径下执行以下命令模拟Producer发消息:
|
sh tools.sh org.apache.rocketmq.example.quickstart.Producer |
(3)观察结果:会发出很多条下面的命令,说明发送成功:
![]()
(4)在ROCKETMQ_HOME路径下执行以下命令模拟Consumer发消息:
|
sh tools.sh org.apache.rocketmq.example.quickstart.Consumer |
(5)观察结果:会收到和上面一样多的命令,说明接收成功,可证明RocketMQ部署成功:
2.3.2 集群安装
1、 根据单实例安装步骤成功安装多个rocketmq
2、Broker的集群部署分为多Master模式、多Master多Slave模式异步复制、多Master多Slave模式同步双写
2.1多Master模式
(1)修改配置 namesrvAddr=ip1:port1;ip2:port2 多个地址之间用分号;隔开
(2)修改配置brokerClusterName=clusterName集群名字设置统一
(3)修改配置brokerName为不同名称
2.2 多Master多Slave模式异步复制(其余配置与多Master模式一致)
一个Master对应一个Slave,Master与Slave的配置不同项为:
Master:brokerRole= ASYNC_MASTER
Slave:brokerRole= SLAVE
2.3 多Master多Slave模式同步双写(其余配置与多Master模式一致)
一个Master对应一个Slave,Master与Slave的配置不同项为:
Master:brokerRole= SYNC_MASTER
Slave:brokerRole= SLAVE
3、 验证
(1) 启动所有rocketmq实例的namesrv和broker
(2) 在ROCKETMQ_HOME路径下执行以下查看集群信息:
|
sh mqadmin clusterList -n namesrvAddr |
以上命令中namesrvAddr需要修改为实际的地址
(3) 观察结果:执行后会显示如下格式的信息

图片中可看出集群下的所有rocketmq单实例
3 目录说明
3.1 Broker目录说明store
store的文件结构如下图:

- Rocketmq消息的存储是由ConsumeQueue和CommitLog配合完成的,消息真正的物理存储文件是CommitLog,ConsumeQueue是消息的逻辑队列,类似数据库的索引文件,存储的是指向物理存储的地址。每个topic下的每个Message Queue都有一个对应的ConsumeQueue文件。
- CommitLog以物理文件的形式存放,每台Broker上的CommitLog被本机器所有ConsumeQueue共享。
- config文件夹下的topics.json存储每个topic的读写队列数、权限、是否顺序等信息; consumerFilter.json存储消息的过滤的相关信息;consumerOffset.json存储每个消费者Consumer在每个topic上对于该topic的consumequeue队列的消费进度;delayOffset.json存储对于延迟主题SCHEDULE_TOPIC_XXXX的每个consumequeue队列的消费进度;subscriptionGroup.json存储每个消费者Consumer的订阅信息。
- Index文件夹存放的是索引文件,用于加快消息查询的速度。
3.2 logs目录说明
RocketMq的文件存放于${user.home}/logs/rocketmqlogs,logs的文件结构如下图:

- Namesrv.log记录着namesrv的运行日志
- Broker.log记录这broker的运行日志
- Store.log记录着消息存储相关的日志
- Remoting.log记录着连接远程机器相关的日志
4 基本功能
4.1生产者(P端)
其中可投递消息类型分为三种:无序消息(同步、异步发送)、有序消息(仅同步发送)。其中无序消息又分为普通消息、延时消息。
4.1.1 普通消息
无具体定制消息格式,最为普通的一种消息。
4.1.2 延时消息
P端发送消息时,指定消息延时发送的级别,级别为1-18级(默认为0级,即不延时发送),对应的时间为1s 5s 10s 30s 1m 2m 3m 4m 5m 6m 7m 8m 9m 10m 20m 30m 1h 2h 。
4.1.3 有序消息
P端发送消息时,只往Topic中选定的一条队列发送消息,这样就可以保证消息有序的投递以及消费
注意:Rocketmq可以严格的保证消息有序,但是要保证全局顺序消息,只能消除所有的并发处理,各部分都设置成单线程处理,这时高并发、高吞吐量的功能就用不上了;但是在保证部分消息有序的情况下,同一个consumer queue的消息有序消费,不同的Consumer queue的消息可以并发处理,可以兼顾消息有序并且实现高并发高吞吐量的效果。
4.2消费者(C端)
必须创建Topic后,才启动C端监听Topic,其中C端的订阅模式分为集群订阅和广播订阅模式。
4.2.1 集群订阅
同一个 ConsumerGroup 所标识的所有 Consumer 平均分摊消费消息。例如某个 Topic 有 9 条消息,一个 ConsumerGroup 有 3 个 Consumer 实例,那么在集群消费模式下每个实例平均分摊,只消费其中的 3 条消息。
4.2.2 广播订阅
同一个 ConsumerGroup 所标识的所有 Consumer 都会各自消费某条消息一次。例如某个 Topic 有 9 条消息,一个 ConsumerGroup 有 3 个 Consumer 实例,那么在广播消费模式下每个实例都会各自消费 9 条消息。
注意:
(1)在广播消费模式下,无法设置消息堆积报警,也无法进行消息堆积查询。因此,您也可以创建多个 ConsumerGroup 来达到广播模式的效果。
(2)顺序消费不支持广播订阅。
4.2.3 注意事项
(1) 订阅关系一致性。同一个ConsumerGroup下订阅的 Topic 必须一致、订阅的 Topic 中的 Tag 必须一致。
本文详细介绍了RocketMQ的部署过程,包括硬件和软件环境要求,单机和集群安装步骤,以及Broker目录和日志目录的说明。此外,还阐述了RocketMQ的基本功能,如生产者(普通消息、延时消息、有序消息)和消费者的集群订阅、广播订阅模式。
2058





