乐趣区

关于rocketmq:RocketMQ-过期文件的删除

在音讯一直的发送给 Broker,Broker 又一直的把音讯贮存在 Commitlog 文件、ConsumeQueue 文件、IndexFile 文件里,磁盘总会有用完的那一刻。

因为 Commitlog 文件、ConsumeQueue 文件都是程序写,也就是说,所有的写操作要么是往最初一个文件里写,要么写满了创立一个新的文件,所以之前的文件都不会被更新,那就能够删除比拟久之前的文件,这些比拟久的文件,就是过期文件。

删除过期文件的时候,须要留神的是,Broker 并不会去判断这里的音讯是否曾经生产,反正删就完事了。

在 Broker 启动的时候,就会启动一个定时工作,提早 60s,而后每 10s 就开始去判断开释要删除过期文件。

对于删除过期的机会包含以下 3 种:

  1. 默认凌晨 4 点。这个也比拟好了解,这个时候用的人也比拟少,删除对系统的影响就降到最小。
  2. 磁盘空间有余。当磁盘空间有余的时候,就要删除过期文件以提供更多的空间进去接管音讯。
  3. 人工触发,指人为的染指去删除。

删除的文件是过期文件,那哪些文件是过期的呢?

首先是保留工夫,默认 72 小时,也就是 3 天,超过 3 天的数据,是须要删除的。

如果这个文件被其余线程援用了,此时就不会进行删除,记录第一次删除的工夫戳,退出本次工作,等 120s 后,就会把文件的援用减 1000,再强制删除。

如果以后删除的文件数量,曾经超过了能够删除的最大批量数,则退出本次工作。

在删除的过程中,会存在删除多个文件的状况,每个文件之间,还有一个工夫距离,比方第一个文件删除完后,须要等 100ms 再删除第二个文件。

退出移动版