kafka日志文件清除策略

238 阅读2分钟

为什么要清除日志文件

由于计算机的存储资源是有限的,而生产者可以无限制的生产数据,所以为了保证kafka正常运行,需要清除日志文件。日志的分段存储一方面可以减少单个文件的大小,另一方面也可以方便kafka进行日志清除

日志清除策略

kafka的日志清除策略可以分为两类:

  • 时间
  • 空间

时间

可以在kafka配置文件中指定消息的过期时间,当消息在kafka中保存的时间超过了过期时间,kafka就会触发日志清除。默认的保留时间是7天

可以通过以下配置进行设置:

  • log.retention.ms
  • log.retention.minutes
  • log.retention.hours
  • retention.ms(topic等级的参数)

kafka如何判断日志文件过期

0.10.0.0版本之前

kafka会检查每个日志段文件的最后修改时间与当前时间,如果两个时间差值超过了设置的阈值,那么kafka就会尝试删除该日志段文件

但是,这样会有问题:因为文件修改时间是会变动的--如果用户通过终端输入命令查看该日志文件或者kafka对该文件切分时

0.10.0.0版本之后

kafka会为每个日志段文件维护一个最大时间戳,检查日志段文件是否过期时会比较该文件的最大时间戳与当前时间,如果两个时间差值超过了设置的阈值,那么kafka就会尝试删除该日志段文件

因为最大时间戳是由kafka维护的,并且此字段对用户是透明的,用户无法直接修改,因此不会出现判断错误的问题

空间

可以在kafka配置文件中指定消息阈值,当文件总大小超过阈值至少一个日志段大小时(日志段文件必须当成一个整体进行删除),kafka会清除最老的日志文件。注意:文件总大小不包括索引文件

可以通过以下配置设置:

  • log.retention.bytes
  • retention.bytes(topic等级的参数)