RocketMq源码随笔-过期文件的删除
引言
RocketMQ中文件的存储是分为3个不同的部分:
- CommitLog,提交日志。所有主题、队列的消息数据都是直接写入这一文件。
- ConsumeQueue,消费队列。按照主题和队列的方式进行区分,消费队列中写入定长20字节的消费条目信息,消费条目中指向了该信息对应在提交日志中的偏移量。
- IndexFile,索引文件。索引文件中写入定长20字节的索引信息,索引信息中指向了消息在提交日志中的偏移量。
RocketMQ不会无限制的将消息存储下去,而是采取一定的策略清除过期文件或者在磁盘不足的时候触发文件的删除,或者是手动的方式触发文件的删除。
在启动一个Broker
的时候,会调用BrokerController
的start
方法,而这个start
方法中也会调用到DefaultMessageStore#start
方法。这个方法在最后会启动一个默认间隔为10秒的周期任务,这个周期任务中会调用CleanCommitLogService#run
和CleanConsumeQueueService#run
两个方法,实现提交日志、消费队列、索引文件的过期删除。
欢迎加入技术交流群186233599讨论交流,也欢迎关注技术公众号:风火说。