本文介绍了RocketMq的部署步骤、运行步骤以及Afa中RocketMq接入接出的配置说明以及组件使用说明,主要应用于使用RocketMq进行消息发送以及消费的场景。
术语和缩写 |
解释 |
备注 |
nameServer |
专门为RocketMQ设计的轻量级名称服务 |
|
producer |
消息生产者,负责生产消息,一般由业务系统负责生产休息 |
|
Consumer |
消息消费者,负责消费消息,一般是后台系统负责异步消息 |
|
Broker |
消息中转角色,负责存储消息,转发消息 |
|
Master |
Broker中的主节点 |
|
Slave |
Broker中的副节点 |
|
异步复制 |
消息写入master节点,再由master节点异步复制到slave节点 |
|
同步双写 |
消息同时写入master节点和slave节点 |
|
异步刷盘 |
Broker的一种持久化策略,消息写入pagecache后,直接返回。由异步线程直接将pagecache写入硬盘 |
|
同步刷盘 |
Broker的一种持久化策略,消息写入pagecache后,由同步线程将pagecache写入硬盘后在返回。 |
|
Tps |
每秒发送消息个数 |
|
参考文件 |
备注 |
|
|
|
|
|
|
|
|
Cpu8核、内存12g、硬盘1t
1. linux系统
2. jdk1.8或以上版本 64位
3. Maven 3.x
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部署成功:
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单实例
store的文件结构如下图:
RocketMq的文件存放于${user.home}/logs/rocketmqlogs,logs的文件结构如下图:
其中可投递消息类型分为三种:无序消息(同步、异步发送)、有序消息(仅同步发送)。其中无序消息又分为普通消息、延时消息。
无具体定制消息格式,最为普通的一种消息。
P端发送消息时,指定消息延时发送的级别,级别为1-18级(默认为0级,即不延时发送),对应的时间为1s 5s 10s 30s 1m 2m 3m 4m 5m 6m 7m 8m 9m 10m 20m 30m 1h 2h 。
P端发送消息时,只往Topic中选定的一条队列发送消息,这样就可以保证消息有序的投递以及消费
注意:Rocketmq可以严格的保证消息有序,但是要保证全局顺序消息,只能消除所有的并发处理,各部分都设置成单线程处理,这时高并发、高吞吐量的功能就用不上了;但是在保证部分消息有序的情况下,同一个consumer queue的消息有序消费,不同的Consumer queue的消息可以并发处理,可以兼顾消息有序并且实现高并发高吞吐量的效果。
必须创建Topic后,才启动C端监听Topic,其中C端的订阅模式分为集群订阅和广播订阅模式。
同一个 ConsumerGroup 所标识的所有 Consumer 平均分摊消费消息。例如某个 Topic 有 9 条消息,一个 ConsumerGroup 有 3 个 Consumer 实例,那么在集群消费模式下每个实例平均分摊,只消费其中的 3 条消息。
同一个 ConsumerGroup 所标识的所有 Consumer 都会各自消费某条消息一次。例如某个 Topic 有 9 条消息,一个 ConsumerGroup 有 3 个 Consumer 实例,那么在广播消费模式下每个实例都会各自消费 9 条消息。
注意:
(1)在广播消费模式下,无法设置消息堆积报警,也无法进行消息堆积查询。因此,您也可以创建多个 ConsumerGroup 来达到广播模式的效果。
(2)顺序消费不支持广播订阅。
(1) 订阅关系一致性。同一个ConsumerGroup下订阅的 Topic 必须一致、订阅的 Topic 中的 Tag 必须一致。