本章主要说的是RMQ的消息存储,一般来说,MQ都是需要进行持久化存储的,比如ActiveMQ RabbitMQ Kafka,

从具体的存储角度来说,直接借用文件系统进行存储是一种很高效的方式和手段,相比使用数据库,KV存储,更加直接,更加底层,比如Unix系统中的 VFS – > 通用块层的概念,但是可靠性和性能往往成反比,所以我们就需要了解RMQ如何进行取舍的

从以下几个方面进行相关的介绍

RMQ存储概览

消息发送存储流程

存储文件组织和内存映射机制

RMQ存储文件格式

消息消费队列,索引文件构建机制

RMQ的恢复机制

RMQ刷盘机制

RMQ的文件删除机制

本章我们会讲述一下RMQ的存储概览

RMQ的文件存储主要在于Commitlog ConsumeQueue IndexFile三个文件上面

RMQ将所有主题的消息存储在同一个文件下,而不是分为多个文件存储

这样就可以保证顺序的写文件,最大可能性保证消息发送的高性能和高吞吐

但是消息中间件基本上都是基于topic进行交流的,所以这样对于按照消息主题检索消息带来了极大的不便,总结一下上面的说法,所有消息存储于Commitlog中,但是所有都存储带来了检索的不便

于是引出了新的一个文件 ConsumeQueue文件,方便通过topic检索对应的消息,

而且每个主题对应着多个消费队列,每个消费队列都有自己的消息文件,就是IndexFile文件

IndexFile And ConsumeQueue的设计理念就是快速的从CommitLog中检索出消息

整体的结构如下

图片

总结一下

RMQ的文件分为三种

1.CommitLog:消息存储文件,所有消息都存于此

2.ConsumeQueue: 消息消费队列,消息到达CommitLog之后,异步转发到消息消费队列,供消费

3.消息索引文件,存储Key和Offset对应的关系

4.事务的状态

5.定时消息服务 延迟消息对应的消息消费队列,存储延迟队列的消息拉取进度(很快就讲)

发表评论

邮箱地址不会被公开。 必填项已用*标注