栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

RocketMQ-Broker(四)-过期文件删除机制

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

RocketMQ-Broker(四)-过期文件删除机制

过期文件删除机制
  • 概述
  • CommitLog文件的删除过程
  • Consume Queue、Index File文件的删除过程(待完善)

概述

RocketMQ中主要保存了CommitLog、Consume Queue、Index File三种数据文件
由于内存和磁盘都是有限的资源,Broker不可能永久地保存所有数据,所以一些超过保存期限的数据会被定期删除
RocketMQ 通过设置数据过期时间来删除额外的数据文件,具体的实现逻辑是通过org.apache.rocketmq.store.DefaultMessageStore.start()方法启动的周期性执行方法DefaultMessageStore.this.cleanFilesPeriodically()来实现的

CommitLog文件的删除过程

CommitLog文件由org.apache.rocketmq.store.DefaultMessageStore.CleanCommitLogService类提供的一个线程服务周期执行删除操作

当满足三个条件时执行删除操作

  1. 当前时间等于已经配置的删除时间
  2. 磁盘使用空间超过85%
  3. 手动执行删除

删除过程如下:
1.克隆全部的 CommitLog 文件。CommitLog 文件可能随时有数据写入,为了不影响正常写入,所以克隆一份来操作
检查每一个CommitLog文件是否过期,如果已过期则立即通过调用destroy()方法进行删除。在删除前会做一系列检查:检查文件被引用的次数、清理映射的所有内存数据对象、释放内存。清理完成后,删除物理文件

为什么会有被挂起的文件呢?
第一次删除有可能失败,比如有线程引用该过期文件,内存映射清理失败等,都可能导致删除失败
如果文件已经关闭,删除前检查没有通过,则可以通过第二次删除来处理

Consume Queue、Index File文件的删除过程(待完善)

Consume Queue和Index File都是索引文件,在CommitLog文件被删除后,对应的索引文件其实没有存在的意义,并且占用磁盘空间,所以这些文件应该被删除。
RocketMQ的删除策略是定时检查,满足删除条件时会删除过期或者无意义的文件

程序调用CleanConsumeQueueService.deleteExpiredFiles()方法来删除索引文件

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/644758.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号