一 清除策略
Kafka
中
默认的日志保存时间为
7
天
,可以通过调整如下参数修改保存时间。配置文件在kafka的config/server.properties文件中:
log.retention.hours,最低优先级小时,默认 7 天。
log.retention.minutes
,分钟。
log.retention.ms
,最高优先级毫秒。
log.retention.check.interval.ms,负责设置检查周期,默认 5 分钟。
那么日志一旦超过了设置的时间,怎么处理呢?
二 清除策略的分类
1.Kafka
中提供的日志清理策略有
delete
和
compact
两种
2.1 日志删除
1.delete
日志删除:将过期数据删除:
log.cleanup.policy = delete
所有数据启用删除策略
(
1
)
基于时间:默认打开
。
以
segment
中所有记录中的最大时间戳作为该文件时间戳。
(2)
基于大小:默认关闭
。超过设置的所有日志总大小,删除最早的
segment
。
log.retention.bytes
,默认等于
-1
,表示无穷大。
思考:
如果一个
segment
中有一部分数据过期,一部分没有过期,怎么处理?
处理的规则:等待获取最新数据时间戳,也就是所有记录中的最大时间戳,作为判断过期的依据,然后进行清理。

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

压缩后的
offset
可能是不连续的,比如上图中没有
6
,当从这些
offset
消费消息时,将会拿到比这个
offset
大
的
offset
对应的消息,实际上会拿到
offset
为
7
的消息,并从这个位置开始消费。
这种策略只适合特殊场景,比如消息的
key
是用户
ID
,
value
是用户的资料,通过这种压缩策略,整个消息 集里就保存了所有用户最新的资料。