目录
1.简介
2.架构
3.核心概念
1.简介
RocketMQ 是一款开源的分布式消息中间件,最初由阿里巴巴集团开发并开源。它旨在为分布式系统提供可靠、高性能、可扩展的消息通信能力。RocketMQ和RabbitMQ、KAFKA一起并列为现在主流的三大消息中间件。
一般MQ可以从三个维度来分析其特点:
- 吞吐量和延迟
- 可靠性
- 消息模型的丰富度
1.吞吐量和延迟:
消息中间件作为常用来实现“流量削峰”的组件,其能在一个时间单位吞吐消息的量是个很重要的指标。RocketMQ最初就是为阿里的“双十一”设计的,目前也是“双十一”期间用来保证系统吞吐量的核心组件之一,其从三个方面保证了高吞吐量和低延迟:
- 分布式架构,RocketMQ 的设计采用了分布式架构,可以将消息存储和处理分散到多个节点上。这样可以实现消息的并行处理,提高系统的吞吐量和并发性能。
- 零拷贝,RocketMQ 在消息传输过程中采用了零拷贝技术,避免了数据在用户空间和内核空间之间的多次拷贝。这样可以减少不必要的数据复制操作,提高数据传输效率,降低延迟。
- RocketMQ 使用了基于消息索引的方式来加速消息的查找和检索。通过构建消息索引,可以快速定位消息存储的位置,提高消息的读取效率。
2.可靠性
消息可靠性,即消息容不容易丢失。RocketMQ和RabbitMQ一样,具有良好的消息可靠性,其用了以下的手段来保证消息的可靠性:
- 持久化,RocketMQ允许将消息持久化到磁盘中,以防止断电丢失。
- 确认和应答,RocketMQ支持发布确认和消费应答,可以在消息在发送到交换器后,向生产者返回确认;可以在消费者成功消费消息后向MQ进行应答。
3.消息模型的丰富度
RocketMQ支持五种消息模型:
- 点对点模型
- 发布订阅模型
- 请求响应模型
- 定时消息模型
- 顺序消息模型
其消息模型的丰富度来说要高于Kafka但是低于RabbitMQ
适合的场景:
从上面三个维度综合来说,
2.架构
整RocketMQ集群的架构和微服务架构类似,有一个存放节点信息的name server,生产者和消费者都去找name server拿broker的信息,再去定位到具体的某一个broker上,进行消息的收发。 broker之间可以用主从的方式进行互相备份,进行容错。
3.核心概念
- Message,消息,数据单元。由topic、tag、body组成。body就是要传输的具体数据。
- Producer,消息的发送者。它负责将消息发送到 RocketMQ 的消息队列中。
- Consumer ,消息接收者。它订阅特定的消息主题(Topic),从 RocketMQ 的消息队列中拉取消息并进行处理。
- topic,消息的逻辑分类,类似于消息的主题或者标签。Producer 发送消息时,需要指定发送到哪个 Topic 下。
- tag,对消息的附加标记,用于在一个主题下对消息进行更细粒度的分类。Consumer 可以根据标签来选择性地订阅和过滤消息。
- message queue,一个消息主题的分区或者分片。每个主题可以被划分为多个消息队列,这样消息就可以被并行处理,提高系统的吞吐量和并发性能。
- broker,负责存储和转发消息。它接收来自 Producer 的消息,并将其存储到合适的消息队列中。同时,它还接收来自 Consumer 的消费请求,并将消息传递给消费者。
- name server,名称服务,负责管理整个 RocketMQ 系统的元数据信息,包括 Topic、Producer、Consumer 等的注册和发现。Producer 和 Consumer 在启动时需要与 Namesrv 进行交互,获取路由信息和元数据。