- 存储篇
- 大文件的磁盘操作——MapedFile
1 存储篇
1.1 整体结构
存储层的结构如下图所示,业务层均通过DefaultMessageStore类提供的方法作为统一入口访问底层文件。RocketMQ底层有6类文件,对于不同类型的文件在存储逻辑层采用不同的类提供服务,其中三类大文件:Index文件由IndexService类提供服务,consumequeue文件由Consumequeue类提供服务,commitlog文件由CommitLog类提供服务,还有两类小文件:checkpoint文件由StoreCheckPoint类提供访问服务、config目录下面的配置文件(以json格式存储)由ConfigMananger类提供访问服务;
对于index/consumequeue/commitlog这三类大文件,为了提供读写性能,底层采用java.nio.MappedByteBuffer类,该类是文件内存映射方案,支持随机读/顺序写操作,为了便于存储逻辑层操作大文件,将该类封装成MapedFile类;对于每类大文件,在存储时分隔成多个固定大小的文件,其中每分隔的文件的文件名为前面所有文件的大小+1,即为文件的起始偏移量,从而实现了整个大文件的串联,每个固定大小的文件均由MapedFile类提供操作服务;MapedFile类提供了顺序写、随机读、内存数据刷盘、内存清理等与文件相关的服务。