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

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


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 参数,应该仔细考虑并做好备份工作,以避免数据丢失。

本文作者:周建伟(上海新炬中北团队)
本文来源:“IT那活儿”公众号

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




