RocketMQ-初体验RocketMQ(05)_RocketMQ架构解读

简介: RocketMQ-初体验RocketMQ(05)_RocketMQ架构解读


Rocketmq整体架构

RocketMQ-初体验RocketMQ(01)_RocketMQ初体验中 对 RocketMQ 架构图做了一个大体的介绍

接下来,我们再细说一下RocketMQ的架构

如上图

整体由4部分组成

  • namesrv
  • broker
  • producer
  • consumer

namesrv

当broker服务启动后,会向namesrv注册信息,比如broker中的 主题、消费偏移量、队列、ip、端口等,由broker的心跳发送到namesrv。

broker cluster中的每一个节点都会注册到namesrv上。

比如 你有4个broker节点,2个namesrv,那么注册如下

这种情况的话,即使一个namesrv节点挂了,剩下的一个namesrv节点仍然包含所有的broker信息。

需要注意的是: namesrv是无状态的, namesrv之间不会相互通信,跟zk是不一样的。一个namesrv挂了,不会影响另外一个namesrv,这俩namesrv是没有关联的。


broker

来南下每个broker的组成吧

每一个broker节点 ,储存消息,都会对应一个commitlog , commitlog 负责存储真实的消息的内容。

broker中的每个topic , 如果不设置的话, 默认创建4个队列, 队列编号 0 , 1 ,2 , 3. 每个队列都会对应一个持久化文件 。

当producer向broker中的topic发送消息的时候, 如果发现队列没有创建持久化文件,会自动创建。 然后该队列的持久化信息都会存放在该持久化文件中。

每个broker下面会创建一个consumerOffset.json文件. 这个json文件用来记录当前你消费节点已经消费的数据位置,即消费的偏移量。这个也是需要持久化的。 这个偏移量的来源 是 consumer 来上报的。(如下图)

consumer从broker中拉取消息后,要进行消费,消费了多多少消息,要把消费这些对应的这些偏移量上报到broker上去。 主要是为了什么呢? ---->最大可能的避免消息重复的推送。


producer & consumer

Q: producer & consumer 到底选择跟哪个broker去连接,去消费哪个broker中的消息?

A: producer & consumer也是无状态的,每一个producer之间 ,每一个consumer之间都不会通信, 每个producer和consumer内部都有自己的一套负载均衡的算法 ,默认的选择策略: 已发送的消息数量对queuecount取mod .

消费者的两种消费模式主要有两种: 推跟拉

  • 拉取式消费(Pull Consumer):Consumer消费的一种类型,应用通常主动调用Consumer的拉消息方法从Broker服务器拉消息、主动权由应用控制。一旦获取了批量消息,应用就会启动消费过程。
  • 推动式消费(Push Consumer):Consumer消费的一种类型,该模式下Broker收到数据后会主动推送给消费端,该消费模式一般实时性较高。

pull的方式,由客户端来主动获取,通过定时任务或者需要的时候从broker端获取,这种方式用的比较少。 如果消息量比较少, 堆积也不会太多,对安全性要求不高的应用,可以考虑。

与此对应的另外一种push方式:

push的方式,在RocketMQ中其实也是基于pull模式的一个深度封装,consumer对broker进行一个长轮询,一直监听broker中的数据,就好像是broker主动推送给consumer似的。


通信方式

producer/consumer broker namesrv 通信方式

producer/consumer 给 broker发送消息/消费消息,或者从 namesrv拉取消息 , 通信是基于netty的方式,优先选用epoll方式,如果操作系统不支持epoll的话,会选择NIO。

相关实践学习
消息队列RocketMQ版:基础消息收发功能体验
本实验场景介绍消息队列RocketMQ版的基础消息收发功能,涵盖实例创建、Topic、Group资源创建以及消息收发体验等基础功能模块。
消息队列 MNS 入门课程
1、消息队列MNS简介 本节课介绍消息队列的MNS的基础概念 2、消息队列MNS特性 本节课介绍消息队列的MNS的主要特性 3、MNS的最佳实践及场景应用 本节课介绍消息队列的MNS的最佳实践及场景应用案例 4、手把手系列:消息队列MNS实操讲 本节课介绍消息队列的MNS的实际操作演示 5、动手实验:基于MNS,0基础轻松构建 Web Client 本节课带您一起基于MNS,0基础轻松构建 Web Client
相关文章
|
11月前
|
消息中间件 大数据 关系型数据库
RocketMQ实战—3.基于RocketMQ升级订单系统架构
本文主要介绍了基于MQ实现订单系统核心流程的异步化改造、基于MQ实现订单系统和第三方系统的解耦、基于MQ实现将订单数据同步给大数据团队、秒杀系统的技术难点以及秒杀商详页的架构设计和基于MQ实现秒杀系统的异步化架构。
723 64
RocketMQ实战—3.基于RocketMQ升级订单系统架构
|
消息中间件 存储 Java
RocketMQ(一):消息中间件缘起,一览整体架构及核心组件
【10月更文挑战第15天】本文介绍了消息中间件的基本概念和特点,重点解析了RocketMQ的整体架构和核心组件。消息中间件如RocketMQ、RabbitMQ、Kafka等,具备异步通信、持久化、削峰填谷、系统解耦等特点,适用于分布式系统。RocketMQ的架构包括NameServer、Broker、Producer、Consumer等组件,通过这些组件实现消息的生产、存储和消费。文章还提供了Spring Boot快速上手RocketMQ的示例代码,帮助读者快速入门。
|
11月前
|
消息中间件 存储 设计模式
RocketMQ原理—5.高可用+高并发+高性能架构
本文主要从高可用架构、高并发架构、高性能架构三个方面来介绍RocketMQ的原理。
3223 21
RocketMQ原理—5.高可用+高并发+高性能架构
|
消息中间件 人工智能 自然语言处理
基于 RocketMQ 事件驱动架构的 AI 应用实践
基于 RocketMQ 事件驱动架构的 AI 应用实践
440 2
|
存储 消息中间件 人工智能
基于 Apache RocketMQ 的 ApsaraMQ Serverless 架构升级
基于 Apache RocketMQ 的 ApsaraMQ Serverless 架构升级
296 0
|
消息中间件 弹性计算 运维
云消息队列RabbitMQ 版架构优化评测
云消息队列RabbitMQ 版架构优化评测
242 6
|
消息中间件 Java RocketMQ
微服务架构师的福音:深度解析Spring Cloud RocketMQ,打造高可靠消息驱动系统的不二之选!
【8月更文挑战第29天】Spring Cloud RocketMQ结合了Spring Cloud生态与RocketMQ消息中间件的优势,简化了RocketMQ在微服务中的集成,使开发者能更专注业务逻辑。通过配置依赖和连接信息,可轻松搭建消息生产和消费流程,支持消息过滤、转换及分布式事务等功能,确保微服务间解耦的同时,提升了系统的稳定性和效率。掌握其应用,有助于构建复杂分布式系统。
439 0
|
5月前
|
Cloud Native Serverless API
微服务架构实战指南:从单体应用到云原生的蜕变之路
🌟蒋星熠Jaxonic,代码为舟的星际旅人。深耕微服务架构,擅以DDD拆分服务、构建高可用通信与治理体系。分享从单体到云原生的实战经验,探索技术演进的无限可能。
微服务架构实战指南:从单体应用到云原生的蜕变之路