kafka学习总结018 --- 消息过期设置

一、kafka全局消息过期时间设置

目录:kafka_2.13-3.3.1/config/server.properties

# The minimum age of a log file to be eligible for deletion due to age

log.retention.hours=168

 

# A size-based retention policy for logs. Segments are pruned from the log unless the remaining

# segments drop below log.retention.bytes. Functions independently of log.retention.hours.

log.retention.bytes=1073741824

 

# The interval at which log segments are checked to see if they can be deleted according

# to the retention policies

log.retention.check.interval.ms=300000

二、针对特定topic设置过期时间

retention.ms(默认七天)

三、kafka过期消息删除过程

kafka消息首先由用户设定一个或多个partition,每个partition中kafka会根据消息量来逐步建立多个segment存储消息,每个segment的大小由配置项进行设定,比如这里:

# The maximum size of a log segment file. When this size is reached a new log segment will be created.

log.segment.bytes=1073741824

kafka至少会保留1个工作segment保存消息。消息量超过单个文件存储大小就会新建segment,比如消息量为2.6GB, 就会建立3个segment。kafka会定时扫描非工segment,将该文件时间和设置的topic过期时间进行对比,如果发现过期就会将该segment文件(具体包括一个log文件和两个index文件)打上.deleted 的标记,如下所示:

最后kafka中会有专门的删除日志定时任务过来扫描,发现.deleted文件就会将其从磁盘上删除,释放磁盘空间,至此kafka过期消息删除完成。

可以看出,kafka删除消息是以segment为维度的,而不是以具体的一条条消息为维度。一个segment包含了一段时期的全部消息并存储在一个文件中,比如上文提到的 00000000000108550131.log

删除时是一次性把这个过期的文件包含所有消息全部删除,效率非常高。可以设想如果是先判断一条条的消息时间是否过期再一条条的执行删除,将十分影响kafka的性能和效率,频繁擦除磁盘,对硬盘性能也有较大影响!

posted @ 2023-01-06 14:41  光头用沙宣  阅读(259)  评论(0编辑  收藏  举报