专业的编程技术博客社区

网站首页 > 博客文章 正文

RocketMQ架构最全详解(图文全面总结)

baijin 2024-09-17 12:09:48 博客文章 4 ℃ 0 评论

大家好,我是mikechen。

RocketMQ是非常重要的消息中间件,是高薪的必备技能,需要重点掌握,下面我就全面来详解RocketMQ架构@mikechen

本篇已收于mikechen原创超30万字《阿里架构师进阶专题合集》里面。

RocketMQ

RocketMQ是一个布式消息中间件,是由阿里巴巴开发和维护的,是一个类似于Apache Kafka消息中间件。

RocketMQ支持消息发送/和消费的顺序保证,并且RocketMQ具有出色的吞吐量性能,能够处理每秒数几十万条消息。

RocketMQ,适用于各种规模的企业级应用场景,比如:实时数据处理、日志采集、消息通知等。

RocketMQ架构

RocketMQ是基于分布式架构设计的,可以水平扩展以应对高负载,和大规模数据处理需求。

整体架构如下:

主要会涉及到:Broker、NameServer、和Producer/Consumer等角色的分布式部署,下面我会分别详解@mikechen

NameServer

NameServer 是 RocketMQ 的一个重要组件,用于管理、和维护整个消息系统的元数据信息,包括 :Broker 的地址、主题(topic) 的路由信息等。

整体设计,如下图所示:

主要解决:

  • 注册Broker信息:当Broker启动时,会向NameServer注册自己的信息,包括:主题(topic)和队列(queue)的路由信息。
  • 提供路由查询服务:Producer和Consumer在发送和消费消息时,需要知道消息应该发送到哪个Broker,NameServer提供了这种路由查询服务。
  • 故障处理:当 Broker 出现故障或宕机时,NameServer 会及时发现并移除故障的 Broker,以防止 Producer 、或 Consumer 发送或接收到无效的 Broker。

Producer

Producer是消息的发送者,负责:将消息发送到RocketMQ的Broker,如下图所示:

主要分为,如下步骤:

1、创建消息

Producer ,首先创建消息,消息可以是任意形式的数据,比如:文本、JSON、二进制数据等。

在创建消息时,Producer 需要指定消息所属的主题(topic),主题是消息的逻辑分类,用于标识消息的类型、或者用途。

2、消息发送

发送消息时,Producer 需要指定消息的目标主题,RocketMQ 系统会根据主题的路由信息,将消息发送到相应的 Broker 节点。

这里会涉及到多种方式:

  • 同步发送:Producer 发送消息后会等待 Broker 的确认,确保消息被成功发送到 Broker。
  • 异步发送:Producer 发送消息后,不会等待 Broker 的确认,而是立即返回,异步发送适用于对消息传输延迟要求不高的场景。
  • 单向发送:Producer 发送消息后不会等待任何确认,直接返回,这种方式下,Producer 不关心消息是否被成功发送到 Broker。

Broker

在 RocketMQ 中,Broker 是消息存储和处理节点,负责存储和管理消息,如下图所示:

1、消息存储

Broker 负责将 Producer 发送的消息持久化存储,确保消息不会丢失。

RocketMQ 使用文件存储的方式来存储消息数据,消息数据被追加写入到文件中,并定期刷写到磁盘上持久化存储。

2、消除传输

Broker 接收 Producer 发送的消息,并将消息传输给相应的 Consumer 进行消费。

当 Consumer 订阅了某个主题时,Broker 会将该主题下的消息发送给 Consumer,以实现消息的传输。

3、存储配置

RocketMQ Broker 的配置包括许多方面,如:存储配置、网络配置..等,如下图所示:

  • brokerName:Broker 的名称,用于唯一标识一个 Broker 节点;
  • namesrvAddr:NameServer 的地址,Broker 会向 NameServer 注册自己的信息;
  • brokerIP1:Broker 的 IP 地址,可以通过IP1、IP2...等来区分;
  • listenPort:Broker 监听的端口号;
  • brokerId:Broker 的唯一标识符,通常与 brokerName 相同。

Consumer

Consumer 是 RocketMQ 中的消息消费者,负责从 Broker 中拉取消息并进行处理,如下图所示:

Consumer 需要通过订阅的方式,告知 RocketMQ 它对哪些主题感兴趣,一旦订阅成功,Consumer 就可以从 Broker 中拉取消息进行消费。

Consumer 定期向 Broker 发送拉取消息的请求,Broker 根据消费者组的消费进度、和消息队列的分配情况,将消息推送给 Consumer。

本篇已收于mikechen原创超30万字《阿里架构师进阶专题合集》里面。

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表