消息存储
主要的存储文件:
1、消息文件(commitLog)
2、消息消费队列文件(consumeQueue)
3、Hash索引文件(IndexFile)
4、检测点文件(checkpoint)
5、关闭异常文件(abort)
文件刷盘机制
RocketMQ的存储与读写是基于JDK NIO的内存映射机制(MappedByteBuffer)的,消息存储时首先将消息追加到内存,再根据配置的刷盘策略在不同时间进行刷写磁盘。
同步刷写:消息追加到内存后,立即将内存消息刷写到磁盘,再对客户端进行应答。
异步刷写:消息追加到内存后,先应答客户端,再使用线程按照设定的频率将内存刷写到磁盘上。(默认的刷写机制)
过期文件删除机制
因:所有的写操作都在最后一个文件(CommitLog,ConsumeQueue)上,之前的文件在下一个文件创建完成后将不会再被更新。
果:清除文件的方法是:如果非当前文件在一定时间间隔内没有再次被更新,则认为是过期文件,可以被删除。
待补充:消息的消费具体工作方式。