运行机制


生产者保存到broker中的消息,会保存在本地的logs/__consumer_offsets-xx/00000000000000000000.log文件中。

默认情况,这些文件不会永久保留,当超过了保留时间或体积后,kafka会对这些文件进行删除。

首先,根据log.retention条件判断,以segment为单位,判断该segment是否为可删除。

如果满足条件,将其标记为可删除。并且在日志文件cleaner-offset-checkpoint中记录当前清理到的位置。

由组件LogCleaner实现,将null写入该log文件中,这样该文件就被置空了。注:此处可再展开。
 

参数

log.retention.bytes
当文件大于该值后,会删除该文件
log.retention.hours
当保留时间超过该时间后,删除文件
The number of hours to keep a log file before deleting it (in hours), tertiary to log.retention.ms property
单位:小时
168(7天)
log.retention.minutes
当保留时间超过该时间后,删除文件。
log.retention.ms
当保留时间超过该时间后,删除文件。
log.retention.check.interval.ms
清理器检查日志符合被删除条件的轮询时间
单位是:毫秒 
300000 (5 minutes)
log.segment.bytes=1024 
#该值是每个日志片段的体积,如果超过该体积,就会新建一个日志。非本次实验重点。

 

参数间关系

时间参数优先级

ms>minutes>hours

当时间参数与空间参数都存在时,谁先满足,就执行谁。

例:

log.retentions.hours=168

log.retentions.bytes=1024

当文件体积达到1024后,即便没有超过168小时,也会删除该文件。
 

实验

log.retention.hours=168

log.retention.bytes=1024

log.segment.bytes=1024

log.retention.check.interval.ms=10000

分段体积超过了log.segment.bytes=1024,所以产生了新的日志

时间超过7天或者体积超过1024 ,检测到可被删除的段。 

 

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐