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
相关文章
|
3月前
|
消息中间件 存储 Java
RocketMQ(一):消息中间件缘起,一览整体架构及核心组件
【10月更文挑战第15天】本文介绍了消息中间件的基本概念和特点,重点解析了RocketMQ的整体架构和核心组件。消息中间件如RocketMQ、RabbitMQ、Kafka等,具备异步通信、持久化、削峰填谷、系统解耦等特点,适用于分布式系统。RocketMQ的架构包括NameServer、Broker、Producer、Consumer等组件,通过这些组件实现消息的生产、存储和消费。文章还提供了Spring Boot快速上手RocketMQ的示例代码,帮助读者快速入门。
|
5月前
|
消息中间件 存储 Java
RabbitMQ 在微服务架构中的高级应用
【8月更文第28天】在微服务架构中,服务之间需要通过轻量级的通信机制进行交互。其中一种流行的解决方案是使用消息队列,如 RabbitMQ,来实现异步通信和解耦。本文将探讨如何利用 RabbitMQ 作为服务间通信的核心组件,并构建高效的事件驱动架构。
200 2
|
4月前
|
消息中间件 弹性计算 运维
云消息队列RabbitMQ 版架构优化评测
云消息队列RabbitMQ 版架构优化评测
73 6
|
5月前
|
网络协议 Java 物联网
MQTT(EMQX) - SpringBoot 整合MQTT 连接池 Demo - 附源代码 + 在线客服聊天架构图
MQTT(EMQX) - SpringBoot 整合MQTT 连接池 Demo - 附源代码 + 在线客服聊天架构图
1103 3
|
5月前
|
消息中间件 Java RocketMQ
微服务架构师的福音:深度解析Spring Cloud RocketMQ,打造高可靠消息驱动系统的不二之选!
【8月更文挑战第29天】Spring Cloud RocketMQ结合了Spring Cloud生态与RocketMQ消息中间件的优势,简化了RocketMQ在微服务中的集成,使开发者能更专注业务逻辑。通过配置依赖和连接信息,可轻松搭建消息生产和消费流程,支持消息过滤、转换及分布式事务等功能,确保微服务间解耦的同时,提升了系统的稳定性和效率。掌握其应用,有助于构建复杂分布式系统。
78 0
|
6月前
|
消息中间件 存储 缓存
架构设计篇问题之消息队列(MQ)在微服务系统中问题如何解决
架构设计篇问题之消息队列(MQ)在微服务系统中问题如何解决
|
7月前
|
消息中间件 存储 SQL
RocketMQ与Kafka架构深度对比
RocketMQ与Kafka架构深度对比
|
8月前
|
消息中间件 存储 Apache
MQ产品使用合集之有RocketMQ arm架构的镜像吗
消息队列(MQ)是一种用于异步通信和解耦的应用程序间消息传递的服务,广泛应用于分布式系统中。针对不同的MQ产品,如阿里云的RocketMQ、RabbitMQ等,它们在实现上述场景时可能会有不同的特性和优势,比如RocketMQ强调高吞吐量、低延迟和高可用性,适合大规模分布式系统;而RabbitMQ则以其灵活的路由规则和丰富的协议支持受到青睐。下面是一些常见的消息队列MQ产品的使用场景合集,这些场景涵盖了多种行业和业务需求。
366 1
|
8月前
|
消息中间件 Java RocketMQ
Spring Cloud RocketMQ:构建可靠消息驱动的微服务架构
【4月更文挑战第28天】消息队列在微服务架构中扮演着至关重要的角色,能够实现服务之间的解耦、异步通信以及数据分发。Spring Cloud RocketMQ作为Apache RocketMQ的Spring Cloud集成,为微服务架构提供了可靠的消息传输机制。
271 1
|
8月前
|
消息中间件 存储 数据库
RabbitMQ入门指南(二):架构和管理控制台的使用
RabbitMQ是一个高效、可靠的开源消息队列系统,广泛用于软件开发、数据传输、微服务等领域。本文主要介绍了RabbitMQ架构和管理控制台的使用等内容。
203 0
RabbitMQ入门指南(二):架构和管理控制台的使用