在音讯一直的发送给Broker,Broker又一直的把音讯贮存在Commitlog文件、ConsumeQueue文件、IndexFile文件里,磁盘总会有用完的那一刻。
因为Commitlog文件、ConsumeQueue文件都是程序写,也就是说,所有的写操作要么是往最初一个文件里写,要么写满了创立一个新的文件,所以之前的文件都不会被更新,那就能够删除比拟久之前的文件,这些比拟久的文件,就是过期文件。
删除过期文件的时候,须要留神的是,Broker并不会去判断这里的音讯是否曾经生产,反正删就完事了。
在Broker启动的时候,就会启动一个定时工作,提早60s,而后每10s就开始去判断开释要删除过期文件。
对于删除过期的机会包含以下3种:
- 默认凌晨4点。这个也比拟好了解,这个时候用的人也比拟少,删除对系统的影响就降到最小。
- 磁盘空间有余。当磁盘空间有余的时候,就要删除过期文件以提供更多的空间进去接管音讯。
- 人工触发,指人为的染指去删除。
删除的文件是过期文件,那哪些文件是过期的呢?
首先是保留工夫,默认72小时,也就是3天,超过3天的数据,是须要删除的。
如果这个文件被其余线程援用了,此时就不会进行删除,记录第一次删除的工夫戳,退出本次工作,等120s后,就会把文件的援用减1000,再强制删除。
如果以后删除的文件数量,曾经超过了能够删除的最大批量数,则退出本次工作。
在删除的过程中,会存在删除多个文件的状况,每个文件之间,还有一个工夫距离,比方第一个文件删除完后,须要等100ms再删除第二个文件。