一、设计理念:
RocketMQ设计基于主题的发布与订阅模式,其核心功能包括消息发送、消息存储(broker)、消息消费,整体设计追求简单与性能统一,主要体现在以下三个方面。
1.1、NameServer设计,摒弃了业界常用的Zookeper充当注册中心,使用NameServer实现元数据的管理(Topic)路由信息等,因为topic路由信息无需在集群之间保持强一致性,最终追求一致性,并且能忍受分钟级不一致,RocketMQ的NameServer的集群之间互不通信。
1.2、高效的IO存储机制。将消息的存储文件设计成文件租的概念、组内单个文件大小固定、所有主题消息存储基于顺序存储,还引入消息队列文件和索引文件。
1.3、只保证消息被消费者消费,设计上允许消息被重复消费
二、架构模式:
2.1、采用发布订阅模式,基本组件有、消息发送者、消息服务器(消息存储,broker)、消息消费、路由发现
2.2、顺序消费:消息消费顺序同存储到队列的顺序一致。
2.3、消息过滤:支持在服务端与消费端的消息过滤机制
2.3.1:消息在broker端过滤,只将消费者感兴趣的消息发送给消费者
2.3.2:在消费消息端过滤:完全由消费者自定义,但是会产生大量的消息无用的消息。
2.4:、消息存储;消息的核心实现是消息的存储,引入了内存映射机制,所有主题的消息顺序存储在同一个文件中,为了避免消息无限的存储在服务器中,引入了消息文件过期机制与文件存储空间报警机制
2.5、消息到达低延迟:在不发生消息的堆积时,以长轮模式实现准实时的消息推送模式
2.6、确保消息被消费一次:通过消息确认机制(ACK)来确保消息最少被消费一次,但是rocketMQ无法保证消息只被消费一次,有重复消费的可能。
2.7、回溯消息:已经被消费的消息,可以按照时间回溯消息,时间维度可精确到毫秒,可以向前或者向后回溯
2.8、消息堆积:RocketMQ使用磁盘文件(内存映射机制),并在物理布局上为多个大小相等的文件组成逻辑文件组,可以无限循环使用,并不是永久保留在消息服务器端,而是提供了过期机制,一般默认3天
2.9、定时消息:RocketMQ不支持任意进度的定时消息,只支持特定的延迟级别
2.10、消息重试机制:在消息进行消费时,发生异常,RocketMQ支持消息重试机制。