为什么要有文件过期删除机制
RocketMQ启动时会加载commitLog、commitQueue目录下的所有文件,为了避免内存和磁盘的浪费,所以引入过期文件删除机制。
RocketMQ删除过期文件的方法
如果非当前写文件在一定的时间间隔内没有再次被更新,则认为是过期文件,可以被删除。RocketMQ不会关注这个文件上的消息是否全部被消费。
默认过期时间72小时,可通过 fileReservedTime 修改
过期文件删除机制
-
每隔10秒调度一次 cleanFilesPeriodically ,检测是否需要清理过期文件
-
满足以下三个条件之一将继续执行文件删除
- 指定删除文件的时间点 默认凌晨4点
- 磁盘空间不足
- 手动触发删除
-
执行文件删除
可通过配置删除调度时间间隔、文件过期时间、文件删除时间点、磁盘占用比例等来清理过期文件