基本概念

Kafka中==默认的日志保存时间为7天==,可以通过调整如下参数修改保存时间。

  • log.retention.hours:天,默认为7天,最低优先级
  • log.retention.minutes:分钟
  • log.retention.ms:毫秒,最高优先级
  • log.retention.check.interval.ms:检查周期,默认5分钟

日志保存周期优先级:小时(hours) < 分钟(minutes) < 毫秒(ms)

==注意==:检查周期需要比默认保存时间小;

当日志查过了设置的时间,则进行清理,Kafka中提供的日志清理策略有==delete和compact==两种(默认为删除策略)。

delete(删除)策略

日志删除:将过期的数据删除

  • log.cleanup.policy=delete 所有数据启用删除策略

删除策略有两种方案

  1. ==基于时间==:==默认打开==。==以segment中所有记录的最大时间戳作为该文件的时间戳。==
  2. ==基于大小==:==默认关闭==。超过设置的所有日志总大小,就删除最早的segment。log.retention.bytes,默认等于 -1,表示无穷大。

20220414220208.png

最大时间戳没过期,这个文件就不算过期。

compact(压缩)策略

compact日志压缩:==对于相同key的不同value值,只保留最后一个版本。==

  • log.cleanup.policy=compact 所有数据启用压缩策略

20220414224200.png

压缩后的offset可能是不连续的,比如上图压缩后的数据中没有Offset为6的消息,从这些offset消费消息时,将会拿到比这个offset大的offset对应的消息,就是说实际上会拿到offset为7的消息,并从7这个位置开始消费。

==注意==:这种策略==只适合特殊场景==,比如消息的key为用户ID,value是用户的资料,通过这种压缩策略,整个消息集里就保存了所有用户最新的资料。