本章主要说的是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.定时消息服务 延迟消息对应的消息消费队列,存储延迟队列的消息拉取进度(很快就讲)