美文网首页
kafka-nfs占用空间排查,以及kafka日志清理的策略

kafka-nfs占用空间排查,以及kafka日志清理的策略

作者: 催化剂 | 来源:发表于2023-04-22 16:51 被阅读0次

kafka大讲座:https://www.cnblogs.com/zackstang/category/1520711.html

参考链接:https://www.cnblogs.com/zackstang/p/11638127.html

https://blog.csdn.net/m0_45097637/article/details/123674946

kafka将topic分成不同的partitions,每个partition的日志分成不同的segments,最后以segment为单位将陈旧的日志从文件系统删除。

root@master:/public/nfs#   du -d 1 -m . -hl

du -d 1 -m . -hl

Kafka过期数据清理策略

log.retention.hours=24 //1d

log.retention.check.interval.ms=300000 //5min

log.segment.bytes=1073741824 //1G

log.cleaner.enable=true

log.cleaner.delete.retention.ms=86400000 // 1d

log.cleaner.backoff.ms=15000 //15s

log.cleanup.policy=delete

  在Kafka中,过期数据的清理是通过两个参数控制的:log.retention.ms和log.retention.bytes。

  log.retention.ms:指定一个日志分段(log segment)最长保留的时间。 默认情况下,这个值是7天。在这个时间之前创建的所有分段都不会被删除,而在这个时间之后创建的分段,如果不再被引用,就会被删除。可以通过修改这个参数的值来控制过期数据的清理。

  log.retention.bytes:指定日志分段的最大大小。 当一个日志分段的大小超过了这个值,且它不再被引用,就会被删除。这个参数的默认值是-1,表示不启用大小限制。

  在Kafka中,每个分区都有一个独立的日志文件(log file),日志文件中包含多个日志分段。每个日志分段包含了一段时间内的数据,或者说一定数量的消息。当一个日志分段被创建时,它会被添加到日志文件中,然后写入的消息会被追加到这个分段中。在日志分段中的消息被消费完毕之后,这个分段就不再被使用了,如果它已经过期或者超过了最大大小,就会被删除。

  需要注意的是,如果使用Kafka的日志清理功能,那么数据的删除不是立即生效的,而是由一个后台线程定期执行清理操作。这个后台线程默认情况下每隔5分钟执行一次清理操作,可以通过log.cleaner.backoff.ms参数修改清理间隔的时间。另外,日志清理操作并不是实时的,它会在一个时间窗口内处理多个日志分段,因此在清理周期内,一些分段可能会被保留下来,即使它们已经过期或者超过了大小限制。

  日志清理的策略只有delete和compact两种

log.cleanup.policy = delete启用删除策略

log.cleanup.policy = compact启用压缩策略

Log Cleanup 策略

在Kafka中,存在数据过期的机制,称为data expire。如何处理过期数据是根据指定的policy(策略)决定的,而处理过期数据的行为,即为log cleanup。

在Kafka中有以下几种处理过期数据的策略:

 log.cleanup.policy=delete(Kafka中所有用户创建的topics,默认均为此策略)

根据数据已保存的时间,进行删除(默认为1周)

 根据log的max size,进行删除(默认为-1,也就是无限制)

 log.cleanup.policy=compact(topic __consumer_offsets 默认为此策略)

 根据messages中的key,进行删除操作

 在active segment 被commit 后,会删除掉old duplicate keys

无限制的时间与空间的日志保留

log.cleanup.policy=delete

log.cleanup.policy=delete 的策略,根据数据保留的时间、以及log的max size,对数据进行cleanup。控制数据保留时间以及log max size的参数分别为:

 log.retention.hours:指定数据保留的时常(默认为一周,168)

o 将参数调整到更高的值,也就意味着会占据更多的磁盘空间

o 更小值意味着保存的数据量会更少(假如consumer 宕机超过一周,则数据便会再未处理前即丢失)

 log.retention.bytes:每个partition中保存的最大数据量大小(默认为-1,也就是无限大)

o 再控制log的大小不超过一个阈值时,会比较有用

自动清理Kafka中的数据可以控制磁盘上数据的大小、删除不需要的数据,同时也减少了对Kafka集群的维护成本。

那Log cleanup 在什么时候发生呢?

· 首先值得注意的是:log cleanup 在partition segment 上发生

· 更小/更多的segment,也就意味着log cleanup 发生的频率会上升

· Log cleanup 不应该频繁发生=> 因为它会消耗CPU与内存资源

· Cleaner的检查会在每15秒进行一次,由log.cleaner.backoff.ms 控制

log.cleaner.backoff.ms  清理检查时间配置

相关文章

网友评论

      本文标题:kafka-nfs占用空间排查,以及kafka日志清理的策略

      本文链接:https://www.haomeiwen.com/subject/tebsjdtx.html