RocketMQ-基础使用(一)

零、本文纲要

一、RocketMQ基础

  1. MQ特点
  2. RocketMQ安装
  3. 测试RocketMQ

二、RocketMQ集群搭建

  1. 角色
  2. 集群特点
  3. 集群模式
  4. 双Master双Slave模式-同步双写

三、mqadmin管理工具

四、RocketMQ监控平台

一、RocketMQ基础

1. MQ特点

优点: 应用解耦 / 流量削峰 / 数据分发
缺点: 可用性降低 / 复杂度提高 / 一致性问题

特性 ActiveMQ RabbitMQ RocketMQ Kafka
开发语言 Java Erlang Java Scala
单机吞吐量 万级 万级 10万级 10万级
时效性 ms us ms ms以内
可用性 高(主从) 高(主从) 非常高(分布式架构) 非常高(分布式架构)
功能特性 成熟的产品,有较多的文档,各种协议支持较好。 基于Erlang开发,并发能力很强,性能极好,延时性低,管理界面友好。 MQ功能比较完善,扩展性佳。 只支持主要的MQ功能,像一些消息查询、消息回溯等功能没有,为了大数据准备的。

2. RocketMQ安装

RocketMQ快速入门官方文档

  • ① 下载安装包/解压

官方下载网址,版本为4.9.3
解压到指定目录下:unzip rocketmq-all-4.9.3-bin-release.zip -d /usr/local

  • ② 启动 NameServer

后台启动:nohup sh bin/mqnamesrv &
查看启动日志:tail -f ~/logs/rocketmqlogs/namesrv.log

注意:如果遇到nohup: 忽略输入并把输出追加到"nohup.out"表示默认输出内容到当前目录下的nohup.out文件中【并不是报错】。

也可以自定义,将输出日志到我们指定的文件,如下:
先创建目录:mkdir -p /root/logs/rocketmqlogs/
再创建文件:touch /root/logs/rocketmqlogs/namesrv.log
最后再使用nohup sh bin/mqnamesrv > ~/logs/rocketmqlogs/namesrv.log 2>&1 &命令。
(此处是RocketMQ启动运行即可生成的日志文件,仅作示范用。)

补充 Linux 命令内容
nohup Command [ Arg … ] [ & ]
Command:要执行的命令;
Arg:一些参数,可以指定输出文件;
&:让命令在后台执行,终端退出后命令仍旧执行。
解读我们的命令:nohup sh bin/mqnamesrv > ~/logs/rocketmqlogs/namesrv.log 2>&1 &
第一处>表示标准输出重定向,此处省略了前面的 1;
~/logs/rocketmqlogs/namesrv.log表示重定向的目标文件;
2>&1表示将标准错误 2 重定向到标准输出 &1;
最后标准输出 &1 再被重定向输入到 namesrv.log 文件中。

  • ③ 启动 Broker

后台启动:nohup sh bin/mqbroker -n localhost:9876 &
查看启动日志:tail -f ~/logs/rocketmqlogs/broker.log

注意:

runbroker.sh默认JVM环境配置内存较大,此处可以按需做调整,默认配置如下:

# 修改前
JAVA_OPT="${JAVA_OPT} -server -Xms8g -Xmx8g -Xmn4g"

# 修改后
JAVA_OPT="${JAVA_OPT} -server -Xms256m -Xmx256m -Xmn128m"

runserver.sh默认JVM环境配置内存也较大,此处可以按需做调整,默认配置如下:

# 修改前
JAVA_OPT="${JAVA_OPT} -server -Xms4g -Xmx4g -Xmn2g -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m"

# 修改后
JAVA_OPT="${JAVA_OPT} -server -Xms256m -Xmx256m -Xmn128m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m"
  • ④ 关闭RocketMQ

关闭 NameServer:sh bin/mqshutdown namesrv
关闭 Broker:sh bin/mqshutdown broker

3. 测试RocketMQ

窗口一:

export NAMESRV_ADDR=localhost:9876
sh bin/tools.sh org.apache.rocketmq.example.quickstart.Producer

窗口二:

export NAMESRV_ADDR=localhost:9876
sh bin/tools.sh org.apache.rocketmq.example.quickstart.Consumer

关闭:

sh bin/mqshutdown broker
sh bin/mqshutdown namesrv

二、RocketMQ集群搭建

1. 角色

Producer(消息发送者) / Consumer(消息接收者)
Broker(暂存和传输消息) / NameServer(管理Broker) / Topic(区分消息的种类) / Message Queue(Topic的分区,存储消息的物理地址)

2. 集群特点

  • ① NameServer

无状态节点,直接启动多个即为集群,节点间无需信息同步;

  • ② Broker

分主从,一主多从,不可一从多主;
主从关系指定使用相同的BrokerName,不同BrokerId,0表示主,非0为从;
每个Broker节点与NameServer集群所有节点建立长连接,定时注册Topic到所有NameServer;

  • ③ Producer

无状态,直接启动多个即为集群,节点间无需信息同步;
与NameServer集群中的一个节点(随机)建立长连接,定期从NameServer取Topic路由信息;
向提供Topic服务的Master建立长连接,定时发送心跳;

  • ④ Consumer

与NameServer集群中的一个节点(随机)建立长连接,定期从NameServer取Topic路由信息;
向提供Topic服务的Master、Slave建立长连接,定时发送心跳;
既可以从Master订阅消息,也可以从Slave订阅消息,订阅规则由Broker配置决定;

3. 集群模式

单Master模式 / 多Master模式 / 多Master多Slave模式(同步/异步)

4. 双Master双Slave模式-同步双写

集群搭建官方文档

  • ① 环境准备
序号 IP-Addr 角色 架构模式
1 192.168.253.128 nameserver、brokerserver Master1、Slave2
2 192.168.253.130 nameserver、brokerserver Master2、Slave1

主机1:broker-a的master、broker-b的slave
主机2:broker-b的master、broker-a的slave

  • ② 配置Host

命令:vim /etc/hosts

# nameserver
192.168.253.128 rocketmq-nameserver1
192.168.253.130 rocketmq-nameserver2
# broker
192.168.253.128 rocketmq-master1
192.168.253.128 rocketmq-slave2
192.168.253.130 rocketmq-master2
192.168.253.130 rocketmq-slave1

重启网卡:systemctl restart network

  • ③ 开放防火墙
# 开放name server默认端口
firewall-cmd --remove-port=9876/tcp --permanent
# 开放master默认端口
firewall-cmd --remove-port=10911/tcp --permanent
# 开放slave默认端口 (当前集群模式可不开启)
firewall-cmd --remove-port=11011/tcp --permanent 
# 重启防火墙
firewall-cmd --reload
  • ④ 配置环境变量

命令:vim /etc/profile

#set rocketmq
ROCKETMQ_HOME=/usr/local/rocketmq/rocketmq-all-4.4.0-bin-release
PATH=$PATH:$ROCKETMQ_HOME/bin
export ROCKETMQ_HOME PATH

重新加载使之生效:source /etc/profile

  • ⑤ 自定义消息存储路径
mkdir -p /usr/local/rocketmq-all-4.4.0-bin-release/store
mkdir -p /usr/local/rocketmq-all-4.4.0-bin-release/store/commitlog
mkdir -p /usr/local/rocketmq-all-4.4.0-bin-release/store/consumequeue
mkdir -p /usr/local/rocketmq-all-4.4.0-bin-release/store/index
  • ⑥ 编写Broker配置文件

通过查看conf/目录不难看出官方默认提供了各种类型的基础配置文件,可以直接使用。如下:

├── conf
    ├── 2m-2s-async     #双主双从(异步)
    ├── 2m-2s-sync  #双主双从(同步)
    ├── 2m-noslave  #双主

Ⅰ master的配置文件

注意修改brokerName、listenPort
主机1:broker-a的master、broker-b的slave
主机2:broker-b的master、broker-a的slave

#所属集群名字
brokerClusterName=rocketmq-cluster
#broker名字,注意此处不同的配置文件填写的不一样
brokerName=broker-a
#0 表示 Master,>0 表示 Slave
brokerId=0
#nameServer地址,分号分割
namesrvAddr=rocketmq-nameserver1:9876;rocketmq-nameserver2:9876
#在发送消息时,自动创建服务器不存在的topic,默认创建的队列数
defaultTopicQueueNums=4
#是否允许 Broker 自动创建Topic,建议线下开启,线上关闭
autoCreateTopicEnable=true
#是否允许 Broker 自动创建订阅组,建议线下开启,线上关闭
autoCreateSubscriptionGroup=true
#Broker 对外服务的监听端口
listenPort=10911
#删除文件时间点,默认凌晨 4点
deleteWhen=04
#文件保留时间,默认 48 小时
fileReservedTime=120
#commitLog每个文件的大小默认1G
mapedFileSizeCommitLog=1073741824
#ConsumeQueue每个文件默认存30W条,根据业务情况调整
mapedFileSizeConsumeQueue=300000
#destroyMapedFileIntervalForcibly=120000
#redeleteHangedFileInterval=120000
#检测物理文件磁盘空间
diskMaxUsedSpaceRatio=88
#存储路径
storePathRootDir=/usr/local/rocketmq-all-4.4.0-bin-release/store
#commitLog 存储路径
storePathCommitLog=/usr/local/rocketmq-all-4.4.0-bin-release/store/commitlog
#消费队列存储路径存储路径
storePathConsumeQueue=/usr/local/rocketmq-all-4.4.0-bin-release/store/consumequeue
#消息索引存储路径
storePathIndex=/usr/local/rocketmq-all-4.4.0-bin-release/store/index
#checkpoint 文件存储路径
storeCheckpoint=/usr/local/rocketmq-all-4.4.0-bin-release/store/checkpoint
#abort 文件存储路径
abortFile=/usr/local/rocketmq-all-4.4.0-bin-release/store/abort
#限制的消息大小
maxMessageSize=65536
#flushCommitLogLeastPages=4
#flushConsumeQueueLeastPages=2
#flushCommitLogThoroughInterval=10000
#flushConsumeQueueThoroughInterval=60000
#Broker 的角色
#- ASYNC_MASTER 异步复制Master
#- SYNC_MASTER 同步双写Master
#- SLAVE
brokerRole=SYNC_MASTER
#刷盘方式
#- ASYNC_FLUSH 异步刷盘
#- SYNC_FLUSH 同步刷盘
flushDiskType=SYNC_FLUSH
#checkTransactionMessageEnable=false
#发消息线程池数量
#sendMessageThreadPoolNums=128
#拉消息线程池数量
#pullMessageThreadPoolNums=128

Ⅱ broker的配置文件

注意修改brokerName、listenPort
主机1:broker-a的master、broker-b的slave
主机2:broker-b的master、broker-a的slave

#所属集群名字
brokerClusterName=rocketmq-cluster
#broker名字,注意此处不同的配置文件填写的不一样
brokerName=broker-b
#0 表示 Master,>0 表示 Slave
brokerId=1
#nameServer地址,分号分割
namesrvAddr=rocketmq-nameserver1:9876;rocketmq-nameserver2:9876
#在发送消息时,自动创建服务器不存在的topic,默认创建的队列数
defaultTopicQueueNums=4
#是否允许 Broker 自动创建Topic,建议线下开启,线上关闭
autoCreateTopicEnable=true
#是否允许 Broker 自动创建订阅组,建议线下开启,线上关闭
autoCreateSubscriptionGroup=true
#Broker 对外服务的监听端口
listenPort=11011
#删除文件时间点,默认凌晨 4点
deleteWhen=04
#文件保留时间,默认 48 小时
fileReservedTime=120
#commitLog每个文件的大小默认1G
mapedFileSizeCommitLog=1073741824
#ConsumeQueue每个文件默认存30W条,根据业务情况调整
mapedFileSizeConsumeQueue=300000
#destroyMapedFileIntervalForcibly=120000
#redeleteHangedFileInterval=120000
#检测物理文件磁盘空间
diskMaxUsedSpaceRatio=88
#存储路径
storePathRootDir=/usr/local/rocketmq-all-4.4.0-bin-release/store
#commitLog 存储路径
storePathCommitLog=/usr/local/rocketmq-all-4.4.0-bin-release/store/commitlog
#消费队列存储路径存储路径
storePathConsumeQueue=/usr/local/rocketmq-all-4.4.0-bin-release/store/consumequeue
#消息索引存储路径
storePathIndex=/usr/local/rocketmq-all-4.4.0-bin-release/store/index
#checkpoint 文件存储路径
storeCheckpoint=/usr/local/rocketmq-all-4.4.0-bin-release/store/checkpoint
#abort 文件存储路径
abortFile=/usr/local/rocketmq-all-4.4.0-bin-release/store/abort
#限制的消息大小
maxMessageSize=65536
#flushCommitLogLeastPages=4
#flushConsumeQueueLeastPages=2
#flushCommitLogThoroughInterval=10000
#flushConsumeQueueThoroughInterval=60000
#Broker 的角色
#- ASYNC_MASTER 异步复制Master
#- SYNC_MASTER 同步双写Master
#- SLAVE
brokerRole=SLAVE
#刷盘方式
#- ASYNC_FLUSH 异步刷盘
#- SYNC_FLUSH 同步刷盘
flushDiskType=ASYNC_FLUSH
#checkTransactionMessageEnable=false
#发消息线程池数量
#sendMessageThreadPoolNums=128
#拉消息线程池数量
#pullMessageThreadPoolNums=128
  • ⑦ 启动集群服务

Ⅰ 启动NameServer集群

分别启动两个主机的NameServer服务,如下:

cd /usr/local/rocketmq-all-4.4.0-bin-release/bin
nohup sh mqnamesrv &

Ⅱ 启动Broker集群

分别启动两个主机的BrokerServer服务,如下:

cd /usr/local/rocketmq-all-4.4.0-bin-release/bin
nohup sh mqbroker -c /usr/local/rocketmq-all-4.4.0-bin-release/conf/2m-2s-sync/broker-a.properties &

cd /usr/local/rocketmq-all-4.4.0-bin-release/bin
nohup sh mqbroker -c /usr/local/rocketmq-all-4.4.0-bin-release/conf/2m-2s-sync/broker-b-s.properties &
cd /usr/local/rocketmq-all-4.4.0-bin-release/bin
nohup sh mqbroker -c /usr/local/rocketmq-all-4.4.0-bin-release/conf/2m-2s-sync/broker-b.properties &

cd /usr/local/rocketmq-all-4.4.0-bin-release/bin
nohup sh mqbroker -c /usr/local/rocketmq-all-4.4.0-bin-release/conf/2m-2s-sync/broker-a-s.properties &

三、mqadmin管理工具

执行命令方法:./mqadmin {command} {args}

具体的内容可见官方文档
由于日常比较少使用,可以使用的时候再查询文档。另外官方也提供了控制台工具,后文会介绍。

四、RocketMQ监控平台

官方拓展开源项目网址,在对应网址内下载rocketmq-console/rocketmq-dashboard。

rocketmq-dashboard开源项目网址,下载开源项目代码,如下:

下载开源项目代码.png

然后使用mvn工具打包如下:

mvn clean package -Dmaven.test.skip=true
使用指令打包监控工具.png

然后上传至对应主机运行,如下:

传递jar包.png

运行jar包,如下:

java -jar target/rocketmq-dashboard-1.0.1-SNAPSHOT.jar

访问RocketMQ-Dashboard,默认为http://192.168.253.128:8080

Dashboard监控平台页面.png

五、结尾

以上即为RocketMQ-基础使用(一)的基础内容,感谢阅读。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,524评论 5 460
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,869评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,813评论 0 320
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,210评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,085评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,117评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,533评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,219评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,487评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,582评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,362评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,218评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,589评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,899评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,176评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,503评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,707评论 2 335

推荐阅读更多精彩内容