一、rocketmq概述
1.rocketmq介绍
1、RocketMQ是阿里巴巴在2012年开源的分布式消息中间件,是一个队列模型的消息中间件,具有高性能、高可靠、高实时、分布式特点,可集群部署,先进先出处理模式。
2、topic是一个逻辑上的概念,实际上message是在每个broker上已queue的形式记录。
2.优势
1、异步解耦(A和B应用相互不依赖,中间有个第三方,A将信息全部同步到第三方,B在空闲时间可以将信息从第三方信息取出来,是异步的);
2、限流削峰
3.mq处理机制
4.mq物理架构
5.角色介绍
producer:消息发送者;举例:发信者
consumer:消息接收者;举例:收信者
broker:暂存和传输消息;举例:邮局
nameserver:管理broker;举例:各个邮件的管理机构
topic:区分消息种类;一个发送者可以发送消息给一个或多个topic;一个消息的接收者可以订阅一个或多个topic消息
message queue:相当于topic的分区,用于并行发送
6.集群模式
6.1 单master模式
不推荐这种模式,这种风险比较大,一旦broker重启或宕机时,会导致整个服务不能使用,可以用于测试。
6.2 多master模式
一个集群无slave,全是master。
优点:配置简单,但是个master宕机或重启应用服务无影响,在磁盘配置为RAID10时,即使机器宕机不可恢复情况下,由于RAID10磁盘非常可靠,消息也不会丢失(异步刷盘丢失少量信息,同步刷盘一条不会丢),性能最高;
缺点:单台机器宕机期间,这台机器上未被消费的消息在机器恢复之前不可订阅,消息实时性会收到影响。
6.3 多master多slave模式(异步)
每个master配置一个slave,有多对master-slave,HA采用异步复制方式,主备有短暂消息延迟(毫秒级)。
优点:即使磁盘损坏,消息丢失的非常少,且消息实时性不会受影响,同时master宕机后,消费者仍然可以从slave消费,而且此过程对应用透明,不需要人工干预,性能同多master模式几乎一样。
缺点:master宕机,磁盘损坏情况下会丢失少量消息。
6.4 多master多slave模式(同步)
每个master配置一个slave,有多对master-slave,HA采用同步双写方式,即只有主备都写成功,才向应用返回成功。
有点:数据与服务都无单点故障,master宕机情况下,消息无延迟,服务可用性与数据e
7.集群特点
1、NameServer是一个几乎无状态节点,可集群部署,节点之间无任何信息同步。
2、Broker部署相对复杂,Broker分为Master和Slave,一个Master可以对应多个Slave,但是一个Slave只能对应一个Master。
Master与Slave的对应关系通过指定相同的BrokerName,不同的BrokerId来定义,BrokerId为0时表示Master,不为0时为Slave
Master可以部署多个。每个Broker与NameServer集群中的所有节点建立长连接,定时注册Topic信息到所有NameServer。
3、Producer与NameServer集群中的其中一个节点(随机选择)建立长连接,定期从NameServer取Topic路由信息,并向提供Topic服务的Master建立长连接,且定时向Master发送心跳。Producer完全无状态,可集群部署。
4、Consumer与NameServer集群中的其中一个节点(随机选择)建立长连接,定期从NameServer取Topic路由信息,并向提供Topic服务的Master、Slave建立长连接,且定时向Master、Slave发送心跳。Consumer既可以从Master订阅消息,也可以从Slave订阅消息,订阅规则由Broker配置决定。
二、rocketmq安装与启动
1.单机安装与启动
1.1 准备工作
软硬件需求:系统是64位的,jdk版本是1.8及其以上的
1.2 下载rocketmq安装包
下载地址:https://rocketmq.apache.org/
https://archive.apache.org/dist/rocketmq/
1.3 上传至服务器并解压
rz rocketmq-all-4.9.2-bin-release.zip
unzip rocketmq-all-4.9.2-bin-release.zip
1.4 修饰初始内存
cd /export/home/rocketmq/bin
vi bin/runserver.sh
vi bin/runbroker.sh
1.5 开始启动
1.5.1 启动name server
> nohup sh bin/mqnamesrv &
> tail -f ~/logs/rocketmqlogs/namesrv.log
The Name Server boot success...
1.5.2 启动broker
> nohup sh bin/mqbroker -n localhost:9876 &
> tail -f ~/logs/rocketmqlogs/broker.log
The broker[%s, 192.168.1.1:10911] boot success...
1.6 发送和接收消息测试
1.6.1发送消息
> export NAMESRV_ADDR=localhost:9876
> sh bin/tools.sh org.apache.rocketmq.example.quickstart.Producer
SendResult [sendStatus=SEND_OK, msgId= ...
1.6.2 接收消息
> sh bin/tools.sh org.apache.rocketmq.example.quickstart.Consumer
ConsumeMessageThread_%d Receive New Messages: [MessageExt...
1.7 关闭服务
1.7.1 关闭broker
> sh bin/mqshutdown broker
The mqbroker(36695) is running...
Send shutdown request to mqbroker(36695) OK
1.7.2 关闭name server
> sh bin/mqshutdown namesrv
The mqnamesrv(36664) is running...
Send shutdown request to mqnamesrv(36664) OK
1.8 控制台安装与启动
1.8.1 下载地址:rocketmq-console-ng-1.0.1.jar包
1.8.2 使用命令启动:
java -jar rocketmq-console-ng-1.0.0.jar --server.port=8080 --rocketmq.config.namesrvAddr=192.168.1.1:9876 #192.168.1.1 对应的服务器地址
2.集群安装与启动
1.集群架构
双主双从异步复制的rocket集群
| 序号 | ip | 功能 | broker角色 |
| ---- | ------------ | ----------------- | -------------- |
| 1 | 192.168.1.1 | nameserver+broker | master1+slave2 |
| 2 | 192.168.1.2 | Nameserver+broker | master2+slave1 |
2.修改配置文件
192.168.1.1服务器1
2.1、修改 broker-a.properties
cd /export/home/rocketmq/conf/2m-2s-async
vi broker-a.properites
namesrvAddr=192.168.1.1:9876;192.168.1.2:9876
2.2、修改 broker-b-s.properties
vi broker-b-s.properties
namesrvAddr=192.168.1.1:9876;192.168.1.2:9876
listenPort=11911
storePathRootDir=~/store-s
storePathcommitLog=~/store-s/commitlog
storePathconsumeQueue=~/store-s/consumequeue
storePathIndex=~/store-s/index
storecheckpoint=~/store-s/checkpoint
abortFile=~/store-s/abort
192.168.1.2服务器2
2.3、修改 broker-a-s.properties
cd /export/home/rocketmq/conf/2m-2s-async
vi broker-a-s.properties
namesrvAddr=192.168.1.1:9876;192.168.1.2:9876
listenPort=11911
storePathRootDir=~/store-s
storePathcommitLog=~/store-s/commitlog
storePathconsumeQueue=~/store-s/consumequeue
storePathIndex=~/store-s/index
storecheckpoint=~/store-s/checkpoint
abortFile=~/store-s/abort
2.4、修改 broker-b.properties
vi broker-b.properites
namesrvAddr=192.168.1.1:9876;192.168.1.2:9876
3.启动集群
3.1、启动nameserver集群
192.168.1.1服务器1
cd /export/home/rocketmq
nohup sh bin/mqnamesrv &
tail -f ~/logs/rocketmqlogs/namesrv.log
192.168.1.2服务器2
cd /export/home/rocketmq
nohup sh bin/mqnamesrv &
tail -f ~/logs/rocketmqlogs/namesrv.log
3.2、启动master集群
192.168.1.1服务器1
cd /export/home/rocketmq
nohup sh bin/mqbroker -c conf/2m-2s-async/broker-a.properties &
tail -f ~/logs/rocketmqlogs/broker.log
192.168.1.2服务器2
cd /export/home/rocketmq
nohup sh bin/mqbroker -c conf/2m-2s-async/broker-b.properties &
tail -f ~/logs/rocketmqlogs/broker.log
3.3、启动slave集群
192.168.1.1服务器1
cd /export/home/rocketmq
nohup sh bin/mqbroker -c conf/2m-2s-async/broker-b-s.properties &
tail -f ~/logs/rocketmqlogs/broker.log
192.168.1.2服务器2
cd /export/home/rocketmq
nohup sh bin/mqbroker -c conf/2m-2s-async/broker-a-s.properties &
tail -f ~/logs/rocketmqlogs/broker.log
3.环境变量配置
3.1 环境变量配置
vi ~/.bash_profile
export ROCKETMQ_HOME=/export/home/rocketmq/rocketmq
export PATH=$JAVA_HOME/bin:$PATH:$HOME/bin:$ROCKETMQ_HOME/bin
export NAMESRV_ADDR="192.168.1.1:9876;192.168.1.2:9876"
3.2 jvm参数配置
vi $ROCKETMQ_HOME/bin/runserver.sh
JAVA_OPT="${JAVA_OPT} -server -Xms4g -Xmx4g -Xmn2g -XX:PermSize=128m -XX:MaxPermSize=320m"
vi $ROCKETMQ_HOME/bin/runbroker.sh
JAVA_OPT="${JAVA_OPT} -server -Xms8g -Xmx8g -Xmn4g"
note:RocketMQ 堆内存不能小于1G
3.3 控制台启动
nohup java -jar rocketmq-console-ng-1.0.0.jar --server.port=8080 --rocketmq.config. namesrvAddr=192.168.1.1:9876 > ./logs/rocketmq-console.log 2>&1 &
4.mqadmin命令
4.1 topic选项
4.2 新增topic
sh /export/home/rocketmq/rocketmq/bin/mqadmin updateTopic -n '192.168.1.1:9876;192.168.1.2:9876' -b 192.168.1.13:10911 -t test111
sh /export/home/rocketmq/rocketmq/bin/mqadmin updateTopic -n '192.168.1.1:9876;192.168.1.2:9876' -c DefaultCluster -r 16 -w 16 -p 6 -t LOG_PRESENT
4.3 删除topic
sh /export/home/rocketmq/rocketmq/bin/mqadmin deleteTopic -n '192.168.1.1:9876;192.168.1.2:9876' -c AdpMqCluster -t test111
4.4 查询集群信息
sh /export/home/rocketmq/rocketmq/bin/mqadmin clusterList -n '192.168.1.1:9876;192.168.1.2:9876'
4.5 查询所有topic列表信息
sh /export/home/rocketmq/rocketmq/bin/mqadmin topicList -n '192.168.1.1:9876;192.168.1.2:9876'
4.6 查询topic路由信息
sh /export/home/rocketmq/rocketmq/bin/mqadmin topicRoute –n '192.168.1.1:9876;192.168.1.2:9876' –t SMS_TOPIC
4.7 查询topic详细信息
sh /export/home/rocketmq/rocketmq/bin/mqadmin topicstatus –n '192.168.1.1:9876;192.168.1.2:9876' –t SMS_TOPIC
4.8 查询消费情况
sh /export/home/rocketmq/rocketmq/bin/mqadmin consumerProgress -n '192.168.1.1:9876;192.168.1.2:9876'