暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

故障排查:Kafka日志文件缺失导致异常退出

IT那活儿 2023-12-21
1589
点击上方“IT那活儿”公众号--专注于企业全栈运维技术分享,不管IT什么活儿,干就完了!!!  



问题现象



近期刚接手一个项目的运维工作,该项目需要通过Kafka存储并转发ETL数据采集模块生成的日志数据,每隔一段时间(大概是1个月到2个月)Kafka就会异常退出,之前是通过再次启动来解决问题。

近期发现异常退出的频次越来越高,靠这种临时解决方案无法从根本上解决问题;通过排查kafka日志文件$KAFKA_HOME/log/server.log,发现是由于没有找到对应的数据文件导致kafka异常退出,详细报错信息如下:




原因分析



报错信息提示在目录/tmp/kafka-logs目录下面没有找到00000000000000000004.log文件说明这个文件被删除了,这个服务器的运维是我一人负责的,可以排除被误删的可能,也不可能是被kafka删除的,那最大的可能就是被系统删除了。

查询之后发现/tmp目录适用于存放应用程序运行时产生的临时文件,linux会根据实际情况自动清理该目录,kafka的数据文件在使用前可能被系统自动清理掉了。




解决方法



现在已经基本确定数据文件是被系统删除的,那就更改kafka的日志存储目录到安全的路径,kafka 的配置文件是$KAFKA_HOME/config/server.properties,之前的配置如下:

kafka默认的日志存储目录是/tmp/kafka-logs现在在$KAFKA_HOME目录下面创建data目录用于存储日志文件,之后修改配置文件,重启kafka:

另外一种解决方是让linux在自动清理的过程中忽略掉该目录,编辑systemd的配置文件/usr/lib/tmpfiles.d/tmp.conf把目录/tmp/kafka-logs添加到其中:

保存之后执行systemctl restart systemd-tmpfiles.service,重新加载 systemd-tmpfiles 服务以应用新的配置(请注意,这个配置只会影响 Systemd 管理的临时文件清理,其他清理工具可能仍会对这些目录进行清理)。

总 结:

经过近两个月的观察,kafka一直正常运行没有再出现过异常退出的情况,说明之前的日志文件确实是被系统自动清理的。

需要注意的是在重启之后,kafka使用了新的消息日志目录,那么未被消费的消息将会丢失。这是因为kafka没有在新的消息日志目录中找到未被消费的消息,而只能从原来的消息日志目录中恢复未消费的消息。

因此,如果你需要改变 log.dirs 参数,应该仔细考虑并做好备份工作,以避免数据丢失


END



本文作者:周建伟(上海新炬中北团队)

本文来源:“IT那活儿”公众号

文章转载自IT那活儿,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论