RocketMq4.x安装及集群配置
单节点安装RocketMQ4.x
本地环境需配置JAVA_HOME,MAVEN_HOME
-
下载源码包
[下载地址]http://rocketmq.apache.org/dowloading/releases/
-
解压
unzip rocketmq-all-4.4.0-source-release.zip
-
项目构建
# 进入解压目录 cd rocketmq-all-4.4.0 # 构建项目 mvn -Prelease-all -DskipTests clean install -U
-
启动nameServer服务
# 进入目标路径 cd distribution/target/apache-rocketmq # 修改nameServer启动内存大小 # 修改bin/runserver.sh文件 JAVA_OPT="${JAVA_OPT} -server -Xms256m -Xmx256m -Xmn256m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m" # 启动服务 nohup ./bin/mqnamesrv & # 查看nohup.out tail -f nohup.out # 出现The Name Server boot success. serializeType=JSON 表示启动成功
-
启动broker服务
# 修改broker启动内存大小 # 修改bin/runbroker.sh文件 JAVA_OPT="${JAVA_OPT} -server -Xms256m -Xmx256m -Xmn256m" # 启动服务 # -n指定nameserver地址,nameserver服务端口为9876, broker默认端口 10911 nohup ./bin/mqbroker -n localhost:9876 & # 查看nohup.out tail -f nohup.out # 出现The broker[iZuf62iexj3ztw81eg1cnoZ, 172.19.206.22:10911] boot success. serializeType=JSON and name server is localhost:9876 表示启动成功
-
jps查看服务进程
[rocketmq@iZuf62iexj3ztw81eg1cnoZ apache-rocketmq]$ jps 8664 NamesrvStartup 8937 BrokerStartup 15790 Jps [rocketmq@iZuf62iexj3ztw81eg1cnoZ apache-rocketmq]$
-
验证是否成功
#设置名称服务地址 export NAMESRV_ADDR=localhost:9876 #投递消息 sh ./bin/tools.sh org.apache.rocketmq.example.quickstart.Producer # SendResult [sendStatus=SEND_OK, msgId= ... #消费消息 sh ./bin/tools.sh org.apache.rocketmq.example.quickstart.Consumer # ConsumeMessageThread_%d Receive New Messages: [MessageExt...
安装RocketMQ4.x可视化控制台
-
下载源码包
[下载地址]https://github.com/apache/rocketmq-externals/releases
-
解压
tar -zxvf rocketmq-externals-rocketmq-console-1.0.0.tar.gz
-
项目构建
# 进入解压目录 cd rocketmq-externals-rocketmq-console-1.0.0/rocketmq-console/ # 项目构建 mvn clean package -Dmaven.test.skip=true
-
启动rocketmq-console服务
# 修改application.properties文件 vi ./target/classes/application.properties # 指定本机nameserver地址 rocketmq.config.namesrvAddr=127.0.0.1:9876 # 启动服务 java -jar ./target/rocketmq-console-ng-1.0.0.jar # Started App in 10.317 seconds (JVM running for 11.379) 说明启动成功
-
浏览器访问
http://localhost:8080/
生产者常见核心配置
properties | desc |
---|---|
compressMsgBodyOverHowmuch | 消息超过默认字节4096后进行压缩 |
retryTimesWhenSendFailed | 失败重发次数 |
maxMessageSize | 最大消息配置,默认128k |
defaultTopicQueueNums | 自动创建服务器不存在的topic,默认创建的队列数 |
topicQueueNums | 主题下面的队列数量,默认是4 |
autoCreateTopicEnable | 是否自动创建主题Topic, 开发建议为true,生产要为false |
autoCreateSubscriptionGroup | 是否允许 Broker 自动创建订阅组,建议线下开发开启,线上关闭 |
brokerClusterName | 集群名称 |
brokerId | 0表示Master主节点 大于0表示从节点 |
brokerIP1 | Broker服务地址 |
listenPort | Broker监听的端口号 |
brokerRole | broker角色 ASYNC_MASTER/ SYNC_MASTER/ SLAVE |
deleteWhen | 每天执行删除过期文件的时间,默认每天凌晨4点 |
flushDiskType | 刷盘策略, 默认为 ASYNC_FLUSH(异步刷盘), 另外是SYNC_FLUSH(同步刷盘) |
mapedFileSizeCommitLog | 单个conmmitlog文件大小,默认是1GB |
mapedFileSizeConsumeQueue | ConsumeQueue每个文件默认存30W条,可以根据项目调整 |
storePathRootDir | 存储消息以及一些配置信息的根目录 默认为用户的 ${HOME}/store |
storePathCommitLog | commitlog存储目录默认为${storePathRootDir}/commitlog |
storePathIndex | 消息索引存储路径 |
syncFlushTimeout | 同步刷盘超时时间 |
diskMaxUsedSpaceRatio | 检测可用的磁盘空间大小,超过后会写入报错 |
集群模式
-
单节点 :
优点:本地开发测试,配置简单,同步刷盘消息一条都不会丢
缺点:不可靠,如果宕机,会导致服务不可用
-
主从(异步、同步双写) :
优点:
同步双写消息不丢失;
异步复制存在少量丢失 ,主节点宕机,从节点可以对外提供消息的消费,但是不支持写入;
缺点:主备有短暂消息延迟,毫秒级,目前不支持自动切换,需要脚本或者其他程序进行检测然后进行停止broker,重启让从节点成为主节点
-
双主:
优点:配置简单, 可以靠配置RAID磁盘阵列保证消息可靠,异步刷盘丢失少量消息
缺点: master机器宕机期间,未被消费的消息在机器恢复之前不可消费,实时性会受到影响
-
双主双从,多主多从模式(异步复制)
优点:磁盘损坏,消息丢失的非常少,消息实时性不会受影响,Master 宕机后,消费者仍然可以从Slave消费
缺点:主备有短暂消息延迟,毫秒级,如果Master宕机,磁盘损坏情况,会丢失少量消息
-
双主双从,多主多从模式(同步双写)
优点:同步双写方式,主备都写成功,向应用才返回成功,服务可用性与数据可用性都非常高
缺点:性能比异步复制模式略低,主宕机后,备机不能自动切换为主机
主从模式
-
Broker分为master与slave,一个master可以对应多个Slave,但一个slave只能对应一个master,master与slave通过相同的Broker Name来匹配,不同的broker Id来定义是master还是slave
Broker向所有的NameServer结点建立长连接,定时注册Topic和发送元数据信息
-
NameServer定时扫描(默认2分钟)所有存活broker的连接, 如果超过时间没响应则断开连接(心跳检测),但是consumer客户端不能感知,consumer定时(30s)从NameServer获取topic的最新信息,所以broker不可用时,consumer最多最需要30s才能发现
(Producer的机制一样,在未发现broker宕机前发送的消息会失败)
只有master才能进行写入操作,slave不允许写入只能同步,同步策略取决于master的配置。
客户端消费可以从master和slave消费,默认消费者都从master消费,如果在master挂后,客户端从NameServer中感知到Broker宕机,就会从slave消费, 感知非实时,存在一定的滞后性,slave不能保证master的消息100%都同步过来了,会有少量的消息丢失。但一旦master恢复,未同步过去的消息会被最终消费掉
如果consumer实例的数量比message queue的总数量还多的话,多出来的consumer实例将无法分到queue,也就无法消费到消息,也就无法起到分摊负载的作用,所以需要控制让queue的总数量大于等于consumer的数量
单机部署主从模式
异步复制,异步刷盘
-
前提
本地环境需配置JAVA_HOME,MAVEN_HOME
-
端口规划
主机 nameserver(端口) broker(端口) host01 9876 10911 host02 9976 11911 -
下载并解压
# 解压rocketmq-all-4.4.0-source-release.zip为rocketmq-01和rocketmq-02两个名称不同的路径 [rocketmq@localhost software]$ ll 总用量 4624 drwxr-xr-x. 23 rocketmq rocketmq 4096 1月 2 15:42 rocketmq-01 drwxr-xr-x. 23 rocketmq rocketmq 4096 1月 2 15:36 rocketmq-02 -rw-rw-r--. 1 rocketmq rocketmq 1801282 12月 23 18:01 rocketmq-all-4.4.0-source-release.zip
-
项目构建
# 分别进入rocketmq-01和rocketmq-02目录,执行一下命令 mvn -Prelease-all -DskipTests clean install -U
-
配置
主节点(rocketmq-01)
nameserver采用默认配置,无需修改
broker配置修改如下
# 进入配置目录 cd rocketmq-01/distribution/target/apache-rocketmq/conf/2m-2s-async/
# 编辑broker-a.properties,添加或修改以下内容 namesrvAddr=127.0.0.1:9876;127.0.0.1:9976 brokerClusterName=RKCluster brokerName=broker-a brokerId=0 # broker对应ip地址 (常见于sendDefaultImpl call timeout错误) brokerIP1=192.168.11.220 deleteWhen=04 fileReservedTime=48 brokerRole=ASYNC_MASTER flushDiskType=ASYNC_FLUSH #存储路径 storePathRootDir=/home/rocketmq/rk/h01/rootdir-a-m storePathCommitLog=/home/rocketmq/rk/h01/commitlog-a-m
从节点(rocketmq-01)
nameserver配置修改如下
# 进入配置目录 cd rocketmq-02/distribution/target/apache-rocketmq/conf/ # 新建namesrv.properties文件,添加一些内容,指定nameserver启动端口 #!/bin/sh # 指定nameserver访问端口 listenPort=9976
broker配置修改如下
# 进入配置目录 cd rocketmq-02/distribution/target/apache-rocketmq/conf/2m-2s-async/
# 编辑broker-a-s.properties,添加或修改以下内容 namesrvAddr=127.0.0.1:9876;127.0.0.1:9976 brokerClusterName=RKCluster brokerName=broker-a brokerId=1 # broker对应ip地址 (常见于sendDefaultImpl call timeout错误) brokerIP1=192.168.11.220 deleteWhen=04 fileReservedTime=48 brokerRole=SLAVE flushDiskType=ASYNC_FLUSH # 指定启动端口 listenPort=11911 # 存储路径 storePathRootDir=/home/rocketmq/rk/h02/rootdir-a-m storePathCommitLog=/home/rocketmq/rk/h02/commitlog-a-m
-
内存修改
若本机搭建可自行修改服务启动内存
# nameserver 启动内存修改 # rocketmq-01/distribution/target/apache-rocketmq/bin/runserver.sh JAVA_OPT="${JAVA_OPT} -server -Xms256m -Xmx256m -Xmn256m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m" # rocketmq-01/distribution/target/apache-rocketmq/bin/runbroker.sh JAVA_OPT="${JAVA_OPT} -server -Xms512m -Xmx512m -Xmn512m"
-
启动
先启动nameserver服务
-
host01
# 进入目录 # cd rocketmq-01/distribution/target/apache-rocketmq/ nohup ./bin/mqnamesrv &
-
host02
# 进入目录 # cd rocketmq-02/distribution/target/apache-rocketmq/ nohup ./bin/mqnamesrv -c ./conf/namesrv.properties &
启动broker服务
-
host01
# 进入目录 # cd rocketmq-01/distribution/target/apache-rocketmq/ nohup ./bin/mqbroker -c ./conf/2m-2s-async/broker-a.properties &
-
host02
# 进入目录 # cd rocketmq-02/distribution/target/apache-rocketmq/ nohup ./bin/mqbroker -c ./conf/2m-2s-async/broker-a-s.properties &
-
-
启动控制台并访问
自行安装rocketmq-externals
下载地址:https://github.com/apache/rocketmq-externals/branches
双主双从(同步赋值、异步刷盘)
-
集群规划
主机地址 brokerName brokerId nameServer 192.168.11.120 broker-a 0 yes 192.168.11.121 broker-a-s 1 yes 192.168.11.122 broker-b 0 - 192.168.11.123 broker-b-s 1 - -
下载安装
# 四台主机解压rocketmq-all-4.4.0-source-release.zip为rocketmq [rocketmq@localhost software]$ ll 总用量 4624 drwxr-xr-x. 23 rocketmq rocketmq 4096 1月 2 15:42 rocketmq
-
项目构建
# 四台主机进入rocketmq目录,执行命令 mvn -Prelease-all -DskipTests clean install -U
-
nameServer
-
修改内存配置
# 192.168.11.120, 192.168.11.121 都要修改 # rocketmq/distribution/target/apache-rocketmq/bin/runserver.sh JAVA_OPT="${JAVA_OPT} -server -Xms256m -Xmx256m -Xmn256m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m"
-
启动命令
# 分别启动192.168.11.120, 192.168.11.121的nameServer nohup sh bin/mqnamesrv &
-
-
broker
-
修改内存配置
# 192.168.11.120, 192.168.11.121, 192.168.11.122, 192.168.11.123 都要修改 # rocketmq/distribution/target/apache-rocketmq/bin/runbroker.sh JAVA_OPT="${JAVA_OPT} -server -Xms512m -Xmx512m -Xmn512m"
-
修改配置文件及启动命令
192.168.11.120 (broker-a master节点)
# rocketmq/distribution/target/apache-rocketmq/conf/2m-2s-sync/broker-a.properties namesrvAddr=192.168.11.120:9876;192.168.11.121:9876 brokerClusterName=fqxCluster brokerName=broker-a brokerId=0 deleteWhen=04 fileReservedTime=48 brokerRole=SYNC_MASTER flushDiskType=ASYNC_FLUSH defaultTopicQueueNums=4 #是否允许自动创建Topic,建议线下开启,线上关闭 autoCreateTopicEnable=true #是否允许自动创建订阅组,建议线下开启,线上关闭 autoCreateSubscriptionGroup=false #存储路径,根据需求进行配置绝对路径,默认是家目录下面 storePathRootDir=/home/rocketmq/rk/rootdir-a-m storePathCommitLog=/home/rocketmq/rk/commitlog-a-m
# 启动命令 cd rocketmq/distribution/target/apache-rocketmq nohup sh bin/mqbroker -c conf/2m-2s-sync/broker-a.properties &
192.168.11.121 (broker-a slave节点)
# rocketmq/distribution/target/apache-rocketmq/conf/2m-2s-sync/broker-a-s.properties namesrvAddr=192.168.11.120:9876;192.168.11.121:9876 brokerClusterName=fqxCluster brokerName=broker-a brokerId=1 deleteWhen=04 fileReservedTime=48 brokerRole=SLAVE flushDiskType=ASYNC_FLUSH defaultTopicQueueNums=4 #是否允许自动创建Topic,建议线下开启,线上关闭 autoCreateTopicEnable=true #是否允许自动创建订阅组,建议线下开启,线上关闭 autoCreateSubscriptionGroup=false #存储路径,根据需求进行配置绝对路径,默认是家目录下面 storePathRootDir=/home/rocketmq/rk/rootdir-a-m storePathCommitLog=/home/rocketmq/rk/commitlog-a-m
# 启动命令 cd rocketmq/distribution/target/apache-rocketmq nohup sh bin/mqbroker -c conf/2m-2s-sync/broker-a-s.properties &
192.168.11.122 (broker-b master节点)
# rocketmq/distribution/target/apache-rocketmq/conf/2m-2s-sync/broker-b.properties namesrvAddr=192.168.11.120:9876;192.168.11.121:9876 brokerClusterName=fqxCluster brokerName=broker-b brokerId=0 deleteWhen=04 fileReservedTime=48 brokerRole=SYNC_MASTER flushDiskType=ASYNC_FLUSH defaultTopicQueueNums=4 #是否允许自动创建Topic,建议线下开启,线上关闭 autoCreateTopicEnable=true #是否允许自动创建订阅组,建议线下开启,线上关闭 autoCreateSubscriptionGroup=false #存储路径,根据需求进行配置绝对路径,默认是家目录下面 storePathRootDir=/home/rocketmq/rk/rootdir-a-m storePathCommitLog=/home/rocketmq/rk/commitlog-a-m
# 启动命令 cd rocketmq/distribution/target/apache-rocketmq nohup sh bin/mqbroker -c conf/2m-2s-sync/broker-b.properties &
192.168.11.123 (broker-b slave节点)
# rocketmq/distribution/target/apache-rocketmq/conf/2m-2s-sync/broker-a-s.properties namesrvAddr=192.168.11.120:9876;192.168.11.121:9876 brokerClusterName=fqxCluster brokerName=broker-b brokerId=1 deleteWhen=04 fileReservedTime=48 brokerRole=SLAVE flushDiskType=ASYNC_FLUSH defaultTopicQueueNums=4 #是否允许自动创建Topic,建议线下开启,线上关闭 autoCreateTopicEnable=true #是否允许自动创建订阅组,建议线下开启,线上关闭 autoCreateSubscriptionGroup=false #存储路径,根据需求进行配置绝对路径,默认是家目录下面 storePathRootDir=/home/rocketmq/rk/rootdir-a-m storePathCommitLog=/home/rocketmq/rk/commitlog-a-m
# 启动命令 cd rocketmq/distribution/target/apache-rocketmq nohup sh bin/mqbroker -c conf/2m-2s-sync/broker-b-s.properties &
-
自行安装rocketmq-externals,在控制台查看集群运行情况