MQ_02RocketMQ快速实战
2023-04-27 17:24:16 7 举报
AI智能生成
RocketMQ快速实战
作者其他创作
大纲/内容
RocketMQ工作原理
组件组成
NameServer
提供轻量级的Broker路由服务
NameServer服务搭建
mqadminsrv
直接执行脚本就可以启动RocketMQ的NameServer服务
nohup bin/mqnamesrv &
JVM内存大小
RocketMQ默认预设的JVM内存是4G,这是RocketMQ给我们的最佳配置
修改的方式是直接修改runserver.sh
JAVA_OPT="${JAVA_OPT} -server -Xms512m -Xmx512m -Xmn256m -
XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m"
XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m"
CMS垃圾回收器
Broker
实际处理消息存储、转发等服务的核心组件
Broker服务搭建
启动Broker的脚本是runbroker.sh
nohup ./mqbroker &
JVM内存大小
Broker的默认预设内存是8G
修改的方式是直接修改runbroker.sh
JAVA_OPT="${JAVA_OPT} -server -Xms512m -Xmx512m"
G1垃圾回收器
Producer
消息生产者集群。通常是业务系统中的一个功能模块
Consumer
消息消费者集群。通常也是业务系统中的一个功能模块
RocketMQ集群架构
组件组成
Producer
消息的发送者
Consumer
消息接收者
Broker
暂存和传输消息
NameServer
管理Broker
Topic
区分消息的种类;一个发送者可以发送消息给一个或者多个Topic;一个消息的接收者可以订阅一个或者多个Topic消息
RocketMQ主从集群
配置文件
conf/2m-2s-async
2主2从异步刷盘(吞吐量较大,但是消息可能丢失)
2m-2s-sync
2主2从同步刷盘(吞吐量会下降,但是消息更安全)
2m-noslave
2主无从(单点故障),然后还可以直接配置broker.conf,进行单点环境配置
dleger就是用来实现主从切换的
集群中的节点会基于Raft协议随机选举出一个leader,其他的就都是follower。通常正式环境都会采用这种方式来搭建集群
配置细节
brokerId=0
#brokerid,0就表示是Master,>0的都是表示 Slave
defaultTopicQueueNums=4
#在发送消息时,自动创建服务器不存在的topic,默认创建的队列数
autoCreateTopicEnable=true
#是否允许 Broker 自动创建Topic,建议线下开启,线上关闭
autoCreateSubscriptionGroup=true
#是否允许 Broker 自动创建订阅组,建议线下开启,线上关闭
brokerRole=ASYNC_MASTER
#Broker 的角色
#- ASYNC_MASTER 异步复制Master
#- SYNC_MASTER 同步双写Master
#- SLAVE
#- ASYNC_MASTER 异步复制Master
#- SYNC_MASTER 同步双写Master
#- SLAVE
flushDiskType=ASYNC_FLUSH
#刷盘方式
#- ASYNC_FLUSH 异步刷盘
#- SYNC_FLUSH 同步刷盘
#- ASYNC_FLUSH 异步刷盘
#- SYNC_FLUSH 同步刷盘
注意
同一机器上两个实例的store目录不能相同,否则会报错 Lock failed,MQ already started
同一机器上两个实例的listenPort也不能相同。否则会报端口占用的错
如果是多网卡的机器,比如云服务器,那么需要在broker.conf中增加brokerIP1属性,指定所在机器的外网网卡地址
RocketMQ消息转发模型
基础概念
消息消费者(Consumer)
消息生产者(Producer)
负责生产消息,一般由业务系统负责生产消息
发送方式
同步发送、异步发送、顺序发送、单向发送。同步和异步方式均
消息模型(Message Model)
负责消费消息,一般是后台系统负责异步消费
消费形式
拉取式消费、推动式消费
主题(Topic)
表示一类消息的集合,每个主题包含若干条消息,每条消息只能属于一个主题,是RocketMQ进行消息订阅的基本单位
Topic只是一个逻辑概念,并不实际保存消息
同一个Topic下的消息,会分片保存到不同的Broker上,而每一个分片单位,就叫做MessageQueue。MessageQueue是一个具有FIFO特性的队列结构,生产者发送消息与消费者消费消息的最小单位
代理服务器(Broker Server)
消息中转角色,负责存储消息、转发消息
负责接收从生产者发送来的消息并存储、同时为消费者的拉取请求作准备
存储消息相关的元数据,包括消费者组、消费进度偏移和主题和队列消息
子模块
Remoting Module
整个Broker的实体,负责处理来自clients端的请求
Client Manager
负责管理客户端(Producer/Consumer)和维护Consumer的Topic订阅信息
Store Service
提供方便简单的API接口处理消息存储到物理硬盘和查询功能
HA Service
高可用服务,提供Master Broker 和 Slave Broker之间的数据同步功能
Index Service
根据特定的Message key对投递到Broker的消息进行索引服务,以提供消息的快速查询
保证高可用需要搭建主从集群架构
Broker架构模式
普通集群
集群模式下会给每个节点分配一个固定的角色
master负责响应客户端的请求,并存储消息
slave则只负责对master的消息进行同步保存,并响应部分客户端的读请求
消息同步方式分为同步同步和异步同步
Dledger高可用集群
集群会随机选出一个节点作为master,而当master节点挂了后,会从slave中自动选出一个节点升级成为master
名字服务(Name Server)
名称服务充当路由消息的提供者
Broker Server会在启动时向所有的Name Server注册自己的服务信息,
并且后续通过心跳请求的方式保证这个服务信息的实时性
并且后续通过心跳请求的方式保证这个服务信息的实时性
生产者或消费者能够通过名字服务查找各主题相应的Broker IP列表
NameServer中任意的节点挂了,只要有一台服务节点正常,整个路由服务就不会有影响
消息(Message)
消息系统所传输信息的物理载体,生产和消费数据的最小单位,每条消息必须属于一个主题Topic
每个消息拥有唯一的Message ID,且可以携带具有业务标识的Key
Tag标签
Message上有一个为消息设置的标志
用于同一主题下区分不同类型的消息
来自同一业务单元的消息,可以根据不同业务目的在同一主题下设置不同标签
标签能够有效地保持代码的清晰度和连贯性,并优化RocketMQ提供的查询系统
根据Tag实现对不同子主题的不同消费逻辑,实现更好的扩展性
0 条评论
下一页