Kafka过期数据未老化原因及解决方案

举报
Summer_ 发表于 2022/04/28 11:26:37 2022/04/28
【摘要】 一、 针对单个Topic过期时间的配置未设置成功查看Kafka中某个Topic过期时间配置是否成功的方式如下:1) Kafka客户端执行kafka-topics.sh --describe --zookeeper ZK业务IP:24002/kafka --topic TopicName  如果topic的describe信息中有“retention.ms”信息,则设置成功。2)651X版本还...

一、 针对单个Topic过期时间的配置未设置成功

查看Kafka中某个Topic过期时间配置是否成功的方式如下:

1) Kafka客户端执行kafka-topics.sh --describe --zookeeper ZK业务IP:24002/kafka --topic TopicName ab1.png 

如果topic的describe信息中有“retention.ms”信息,则设置成功。

2)651X版本还可以通过FusionInsight Manager页面“集群->Kafka->KafkaTopic监控”中Topic配置查看

ab2.png

二、客户端版本低导致设置未生效

确认执行配置命令的客户端是否与Kafka服务端版本一致,如果不一致,下载最新的客户端重新执行修改配置命令。

三、节点异常或节点磁盘下线或数据目录异常

1.     节点异常

FusionInsight Manager页面“集群->Kafka->实例”查看各个实例状态是否是良好。

2.     磁盘下线

FusionInsight Manager有没有“数据目录状态异常”的告警。Topic副本所在节点server.log日志中搜“offline”关键字和“checkpoint file”关键字查看磁盘是否下线或因checkpoint文件问题没有上线。

3.     数据目录权限异常

节点上Kafka数据目录(一般是“/srv/BigData/kafka/dataX/kafka-logs”)目录权限是否正常。

四、 BufferOverflowException

Kafka server.log日志中删除时出现“Uncaught exception in scheduled task kafka-log-retention”和“java.nio.BufferOverflowException”关键字。

ab3.png

解决办法是升级到6518及之后版本。

五、Kafka数据Timestamp异常

1) 把未过期删除的分区中最早的segment的.log、.timeindex和.index文件拷贝到Kafka客户端所在节点,例如“/opt/client/test”路径

2) 执行kafka-run-class.sh kafka.tools.DumpLogSegments --files .timeindex文件路径 --print-data-log

ab4.png

如果最后一条timestamp时间戳值与当前值的差值小于设置的retention.ms的值,Kafka不会删除此segment及之后所有segment的数据。

例如,执行结果如下所示:

ab5.png

最后一条timestamp时间远超过当前时间,此分区此segment及之后的数据Kafka不会基于时间自动删除。如果想要删除可以手动停节点删除,也可以通过修改基于日志大小来删除。

Kafka基于时间删除时,查找过期的日志分段文件不是根据最近修改时间(因为它可以被有意或者无意修改),而是根据日志分段中的最大时间戳largestTimestamp来计算的。要获取日志分段中的最大时间戳,首先查询该日志分段对应的时间戳索引文件,查找时间戳索引文件中最后一条索引项,若最后一条索引项的时间戳值大于0,则取其值,否则设置为最近修改时间。删除时先从跳表中移除待删除的日志分段,然后加上delete后缀,最后交由delete-file延时任务来删除这些文件,延时任务通过file.delete.delay.ms配置,默认60000(1分钟)。日志删除任务周测检配置是Log.retention.check.interval.ms,默认300000(5分钟)。

【版权声明】本文为华为云社区用户原创内容,未经允许不得转载,如需转载请自行联系原作者进行授权。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。