一、RocketMQ的设计目标
1、架构模式
RocketMQ是采用发布订阅模式,参与的组件:消息发送者,消息存储,消息消费者,路由发现。
2、顺序消息
在RocketMQ中主要指的是局部顺序,队列内是有顺序的。消费消息的顺序和存储到队列的顺序是一致的。
3、消息过滤
在消息消费时,消费者可以对同一主题下的消息按照规则只消费自己感兴趣的消息。支持在服务端过滤(Broker将消费者感兴趣的消息发给消费者)和消费端的消息过滤(缺点:有很多无用的消息会从Broker传输到消费端)的机制。
4、消息存储
消息中间件的核心功能就是消息存储,考量维度:消息堆积能力与消息存储性能。追求消息存储的高性能引入内存映射机制。所有主题的消息顺序存储在同一个文件中。同时为了避免消息无限制的累积,引入了过期机制和空间报警机制。
5、消息的可靠性
通常的可靠性表现在如下的几个场景下:
a、Broker正常关机
b、Broker异常宕机
c、操作系统宕机
d、机器断电,但是能立即恢复供电的情况
e、机器无法开机
f、磁盘设备损坏
情况a-d的RocketMQ在同步刷盘机制下可以保证消息不丢失。在异步刷盘模式下,情况a不会丢失,情况b-d会丢失少量消息。
情况e,f属于单点故障,一旦发生,该节点上的消息全部消失。如果开启了异步复制的话,RocketMQ能保证只会丢失少量数据。后续版本的RocketMQ将会引入多副本机制。
6、消费低延时
在不发生消息堆积时,以长轮询的方式实现准实时的消息推送模式。
7、确保消息被消费一次
ACK:代表消息的确认机制。但是ACK可能会丢失,所以这时消费者就重复消费消息了。
8、回溯消息
由于业务需要重新消费消息,RocketMQ支持时间回溯消息,向前和向后都是可以的,单位精确到毫秒。
9、消息堆积
RocketMQ的特点是异步解耦,而且削峰的能力,所以会有消息的堆积。而且消息不是永久的存储到消息服务器里,提供了过期的机制,默认是3天。
10、定时消息
定时消息是指消息发送到Broker中,不会马上被消费掉。要到特定的时间点才会被消费。如果要定时的消费的话,需要对消息进行排序在broker。这样性能必定会降低。所以不支持任意进度的定时消费。而是支持延迟消费。也就是延迟队列。
11、消息重试机制
消息在消费时,发生异常的话,消息中间件是支持重复消息的投递的。
明天见~~