RocketMQ工作原理详解(看这篇就够了)

RocketMQ工作原理详解(看这篇就够了)-mikechen

消息中间件是高并发的基石,其中RocketMQ是必备掌握的,下面我就全面详解RocketMQ的工作原理@mikechen

RocketMQ

RocketMQ是阿里巴巴开源的分布式消息中间件,适用于大规模实时数据传输和处理,具备高可靠性和高性能。

 

RocketMQ工作原理

RocketMQ 工作原理,是通过将消息的生产者和消费者解耦,以及通过 NameServer 维护信息,实现了高效、可靠的消息传递和处理机制。

RocketMQ整体架构,如下图所示:

RocketMQ工作原理详解(看这篇就够了)-mikechen

如上图所示,主要由四个核心组件组成,包含:NameServer、Brocker、以及Producer和Consumer组成@mikechen

 

NameServer

NameServer 在 RocketMQ 中扮演着重要的角色,主要负责记录维护Topic、Broker的信息,以及提供命名服务。

如下图红色框所示:

RocketMQ工作原理详解(看这篇就够了)-mikechen

NameServer 维护了一个包含所有主题(Topic)和 Broker 的路由信息,每个主题都映射到一个或多个 Broker。

并且,NameServer 保存了所有 Broker 的元数据,包括: Broker 的名称、IP 地址、端口号等。

比如:生产者和消费者在与 RocketMQ 交互时,会通过 NameServer 获取这些元数据信息,以便正确地发送或接收消息。

除此之外,NameServer 还负责检测 Broker 的健康状态,比如:当某个 Broker 发生故障或不可用时,NameServer 会将其从路由信息表中移除。

 

Producer

Producer 在 RocketMQ 中是生产消息的主体,负责将消息发送到指定的主题,并通过负载均衡算法选择合适的 Broker 进行消息的发送。

整体设计,如下图左侧红框所示:

RocketMQ工作原理详解(看这篇就够了)-mikechen

第一:首先消息生成

比如:Producer 负责生成消息,消息可以是文本、二进制数据、或者其他格式的消息数据。

 

第二:消息发送

然后,应用程序通过 Producer 接口, 将消息发送到指定的主题(Topic)。

主题是消息的逻辑分类,相当于一个消息的容器,用于标识一类相关的消息。

比如:订单业务的,商品业务的,用户业务的…等等,用于逻辑分类。

除此之外,消息发送会涉及到不同的策略,比如:同步发送、异步发送、延迟发送…等等,可以根据自己的实际情况来选择发送的类型。

 

Broker

Broker是RocketMQ消息传递系统的核心组件,负责:消息的存储和传输节点,负责接收、存储和传输消息等等。

整体设计,如下图红色框所示:

RocketMQ工作原理详解(看这篇就够了)-mikechen

核心功能,包含:

1.消息存储

Broker 负责接收生产者发送的消息,并将消息存储在磁盘或者内存中。

存储消息的方式可以是持久化存储,也可以是暂存于内存中等待传输。

2.主题管理

每个 Broker 可以管理多个主题(Topic),每个主题包含一个、或多个消息队列(Queue)。

每个队列可以分为多个分区(Partition),用于提高消息的并发处理能力。

3.消息传输

Broker 负责将存储在其中的消息传输给消费者,当消费者订阅了某个主题时,Broker 将根据订阅关系将消息传输给相应的消费者。

Broker配置,如下图所示:

RocketMQ工作原理详解(看这篇就够了)-mikechen

brokerIP1 / brokerIP2:指定 Broker 的 IP 地址,如果是集群部署,可以配置多个 IP 地址,以逗号分隔。

brokerName:指定 Broker 的名称,用于标识一个 Broker 实例。

brokerId:指定 Broker 的唯一标识符。在集群部署中,每个 Broker 都应具有唯一的 brokerId。

listenPort:指定 Broker 监听的端口号,用于与生产者和消费者进行通信。

 

Consumer

RocketMQ 中的 Consumer 是用于接收和处理消息的组件,主要用于订阅主题(Topic),并消费来自 Broker 的消息。

整体设计,如下图红色框所示:

RocketMQ工作原理详解(看这篇就够了)-mikechen

Consumer 在 RocketMQ 中负责:订阅消息、接收消息、消费消息。

Consumer 可以订阅一个、或多个主题(Topic),以接收生产者发送到这些主题的消息。

Consumer也 可以根据订阅关系,从 Broker 主动拉取消息,也可以通过推送方式接收消息。

以上

关注作者「mikechen」公众号,获取更多技术干货!

后台回复【面试】即可获取《史上最全阿里Java面试题总结》,后台回复【架构】,即可获取《阿里架构师进阶专题全部合集

评论交流
    说说你的看法