文章首发到公众号:月伴飞鱼
文章内容收录到个人网站,方便阅读:hardyfish.top/
文章内容收录到个人网站,方便阅读:hardyfish.top/
资料分享
RocketMQ技术内幕:
- 资料链接:url81.ctfile.com/f/57345181-…
- 访问密码:3899
深入理解Kafka:核心设计与实践原理
- 资料链接:url81.ctfile.com/f/57345181-…
- 访问密码:3899
为了向云原生演进,提高资源利用和弹性能力,RocketMQ
在5.0
进行了架构的调整与升级。
Proxy代理层
RocketMQ5.0
以前架构:
❝
RocketMQ5.0
以前使用自定义的Remoting
协议底层基于Netty
进行网络通信,计算存储是一体的,都在Broker
中。生产者和消费者从
NameServer
中拉取到路由信息,之后直接与Broker
交互进行消息的生产与消费。
RocketMQ5.0
架构:
❝
5.0
以后引入了弹性无状态的代理模式,对Broker
的职责进行了拆分。将客户端协议适配、权限管理、消费管理等计算逻辑进行了抽离,放入
Proxy
层,Broker
专注数据的存储。
- 以便更好的适应云原生环境,实现资源弹性调度。
并且
5.0
以后增加了GRPC
协议的支持。
- 它是
RPC
框架,基于Protobuf
序列化。
POP消费模式
RocketMQ5.0
之前
消费有两种方式可以从Broker
获取消息,分别为Pull
模式和Push
模式。
❝
Pull模式:
消费需要不断的从阻塞队列中获取数据,如果没有数据就等待,这个阻塞队列中的数据由消息拉取线程从
Broker
拉取消息之后加入的。所以
Pull
模式下消费需要不断主动从Broker
拉取消息。Push模式:
需要注册消息监听器,当有消息到达时会通过回调函数进行消息消费,从表面上看就像是
Broker
主动推送给消费者一样,所以叫做推模式。底层依旧是消费者从
Broker
拉取数据然后触发回调函数进行消息消费,只不过不需要像Pull
模式一样不断判断是否有消息到来。
RocketMQ5.0
将负载均衡、消费位点管理等功能放到了Broker
端,减少客户端的负担,使其变得轻量级,并且5.0
之后支持消息粒度的负载均衡。
消息粒度负载均衡:
❝
消息粒度负载均衡策略中,同一消费组内的多个消费者将按照消息粒度平均分摊主题中的所有消息。
- 即同一个队列中的消息,可被平均分配给组内多个消费者共同消费。
POP
消息消费:
❝
首先客户端(消费者)向服务端(
Broker
)发送Pop
请求,Broker
端收到请求后以Pop
模式获取消息,之后返回给客户端。客户端消费消息成功之后,向
Broker
发送ACK
请求确认消息消费成功。
Controller模式
在RocketMQ5.0
以前,有两种集群部署模式,分别为主从模式(Master-Slave
模式)和Dledger
模式。
RocketMQ5.0
以后推出了Controller
模式,它的特点如下:
❝
在主从部署模式下就具有自动切换
Master
的能力,5.0之前需要使用DLedger
才可以。可以利用
RocketMQ
原生存储复制能力,并统一RocketMQ
的存储和复制能力。
RocketMQ5.0
对Broker
选主相关的功能进行了抽离,放在Controller
中。
实现了在主从部署模式下就可以自动切换Master,Controller
可以独立部署也可以嵌入在NameServer
中部署。
独立部署下的Controller
:
嵌入NameServer
中的部署图如下:
参考: