1 介绍
RocketMQ是一款分布式消息中间件,其核心技术涉及多个核心概念,包括主题、队列、消息、生产者、消费者、消费者分组以及订阅关系。以下是对这些核心技术的详细说明:
2 核心技术实现
2.1 主题(Topic)
1. 定义 :主题是RocketMQ中消息传输和存储的顶层容器,用于标识同一类型业务逻辑的消息。它是一个逻辑概念,并非实际的消息容器。
2. 作用:
- 数据分类隔离:RocketMQ建议将不同业务类型的数据拆分到不同的主题中,以实现隔离存储和订阅。
- 数据身份和权限管理:RocketMQ中的消息本身是匿名无身份的,同一分类的消息使用相同的主题来做身份识别和权限管理。
3. 名称 :主题名称用于标识主题,且在集群内部全局唯一。
4. 队列列表 :作为主题的组成单元,是消息存储的实际容器,一个主题内包含一个或多个队列,消息实际存储在主题的各队列内。
4. 消息类型:在创建主题时,可以指定主题中存放的消息类型,包括Normal(普通消息)、FIFO(顺序消息)、Delay(定时/延迟消息)、Transaction(事务消息)。
2.2 队列(MessageQueue)
1. 定义 :队列是RocketMQ中消息传输和存储的实际容器,也是RocketMQ消息的最小存储单元。
2. 特点:
- RocketMQ中所有主题都是由多个队列组成,以此实现队列数量的水平拆分和队列内部的流式存储。
- 队列天然具备顺序性,即消息按照进入队列的顺序写入存储,同一队列间的消息天然存在顺序关系。
- 消息在队列中的位置和消息之间的顺序通过位点(Offset)进行标记管理。
2.3 消息(Message)
1. 定义 :消息是RocketMQ中最小的数据传输单元,生产者将需要发送的数据包装成消息发送给RocketMQ的服务端。
2. 特点:
- 不可变性:消息一旦产生,其内容即不可改变
- 持久化:RocketMQ默认会对消息进行持久化,保存到服务端的存储文件中,以保证消息的可回溯性和系统故障场景下的可恢复性。
2.4 生产者(Producer)
1. 定义 :生产者负责将消息发送到RocketMQ的指定主题和队列中。
2. 发送方式:
- 同步发送:有返回值,必须等待消息发送成功才会结束。
- 异步发送:在发送消息后立即返回,同时异步接收传递过去的消息状态。
- 单向发送:单方面发送消息,不需要等待任何回应。
2.5 消费者(Consumer)
1. 定义 :消费者负责从RocketMQ中订阅并消费指定主题的消息。
2. 消费过程:
- 消费者先从Broker拉取消息到客户端,然后启动消费线程消费这些消息。
- 消费者可以使用PullMessageService线程不断从Broker拉取消息,并使用ConsumeMessageService线程进行消费。
2.6 消费者分组(Consumer Group)
1. 定义 :消费者分组是RocketMQ中用于管理消费者的一个概念,同一分组内的消费者共同分摊消息并进行消费。
2. 作用:
- 通过消费者分组,可以实现消息的负载均衡和容错处理。
- RocketMQ要求同一个消费者分组下所有消费者的消费行为要保持一致。
2.7 订阅关系(Subscription)
1. 定义 :订阅关系是指消费者分组与主题之间的关联关系,以及消费者订阅消息时的过滤规则。
2. 作用:
- 通过订阅关系,消费者可以指定要消费的主题和消息类型。
- RocketMQ通过订阅关系来实现消息的过滤和分发。
3 总结
综上所述,RocketMQ的核心技术涉及多个核心概念,这些概念相互协作,共同实现了RocketMQ的高性能、高可用性和高可扩展性。