RcoketMQ 是一款低延迟、高可靠、可伸缩、易于使用的消息中间件。具备以下特性:
它由四部分组成:NameServer 集群、Broker 集群、Producer 集群和 Consumer 集群,每一个都可以水平扩展,而且没有单一的故障。如图所示:
1) NameServer:提供轻量级的服务发现和路由,每个 NameServer 记录完整的路由信息,提供等效的读写服务,并支持快速存储扩展,它包括两个特性:
2) Broker:通过提供轻量级的 Topic 和 Queue 机制来处理消息存储,同时支持推(push)和拉(pull)模式以及主从结构的容错机制,它包括几个重要的子模块,如图所示:
3) Producer:生产者,产生消息的实例,拥有相同 Producer Group 的 Producer 组成一个集群。
4) Consumer:消费者,接收消息进行消费的实例,拥有相同 Consumer Group 的
Consumer 组成一个集群。
1) Producer:消息生产者,负责产生消息,一般由业务系统负责产生消息。它支持多种发送方式:同步、异步和单向。
2) Producer Group:一类 Producer 的集合名称,这类 Producer 通常发送一类消息,且发送逻辑一致。
注意,考虑到Produer在消息发送方面能力较强,允许每个Produer Group仅有一个实例,避免不必要的Producer实例化。
3) Consumer:消息消费者,负责消费消息,一般是后台系统负责异步消费。它提供两种消费类型:
4) Consumer Group:一类 Consumer 的集合名称,这类 Consumer 通常消费一类消息,且消费逻辑一致。
注意,RocketMQ使用该概念来实现负载均衡和容错的目标。同一个Consumer Group的Consumer实例,必须订阅相同的Topic。
5) Topic:消息的逻辑管理单位,用于将消息按Topic划分,是一个逻辑概念,消息存储不会按Topic分开。Producer将消息发往指定的Topic,Consumer订阅该Topic就可以收到这条消息。Topic跟发送方和消费方都没有强关联关系,发送方可以同时往多个Topic投放消息,消费方也可以订阅多个Topic的消息。
6) Message:代表一条消息,使用MessageId唯一识别,用户在发送时可以设置messageKey,便于之后查询和跟踪。一个 Message 必须指定 Topic,相当于寄信的地址。Message 还有一个可选的 Tag 设置,以便消费端可以基于 Tag 进行过滤消息。也可以添加额外的键值对,例如你需要一个业务 key 来查找 Broker 上的消息,方便在开发过程中诊断问题。
7) Message Queue:把一个Topic划分为多个“Sub-Topic,即是消息队列”。主要用于负载均衡,发送消息时,用户只指定Topic,Producer会根据Topic的路由信息选择具体发到哪个Queue上。Consumer订阅消息时,会根据负载均衡策略决定订阅哪些Queue的消息。
8) Tag:标签可以被认为是对 Topic 进一步细化。一般在相同业务模块中通过引入标签来标记不同用途的消息。
9) Broker:Broker是RocketMQ的核心模块,负责接收并存储消息,同时提供Push/Pull接口来将消息发送给Consumer。Consumer可选择从Master或者Slave读取数据。多个主/从组成Broker集群,集群内的Master节点之间不做数据交互。Broker同时提供消息查询的功能,可以通过MessageID和MessageKey来查询消息。Borker会将自己的Topic配置信息实时同步到NameServer。
10) Name Server:可以看作是RocketMQ的注册中心,它管理两部分数据:集群的Topic-Queue的路由配置;Broker的实时配置信息。其它模块通过Nameserv提供的接口获取最新的Topic配置和路由信息。
11) Message Model:消息消费模式。
12) Message Order:消息顺序。
13) Message Offset:RocketMQ在存储消息时会为每个Topic下的每个Queue生成一个消息的索引文件,每个Queue都对应一个Offset记录当前Queue中消息条数。
引用
Github
RocketMQ 架构
RocketMQ 核心概念