现象介绍
我们生产环境kafka集群是由5台broker组成,分布在不同的主机上。部署后运行正常,消息消费正常。但总会在一段时间(一到两个月)
会发生一次节点宕机,且5个节点随机宕。发现后重新启动即可恢复正常。生产日志大致内容为log下的某一文件不存在。
配置介绍
我们的配置基本参考默认配置进行,其中重要的一项log.dirs=/tmp/kafka-logs,这个是目前我经过百度、分析之后认为最有可能影响节点宕机的主要原因。因为异常日志也会涉及log相关文件不存在的报错。
经过不断的百度、分析和查看日志。现在基本定位问题,就是linux存在自动清理tmp文件夹的定时任务,当清理到tmp/kafka-logs里面的kafka节点相关信息后,因为kafka获取不到相关信息,就会强制宕机。
解决办法
目前想到两个:
1、修改linux的定时清理任务,经过百度得知,centos系统的清理任务在/tmp目录的清理规则主要取决于/usr/lib/tmpfiles.d/tmp.conf文件的设定,里面可以配置不包含某一个文件夹内容,这样就可以解决这个问题。
2、在某次上线时,当kafka的消息消费完成后,停掉kafka,并将log.dirs=/tmp/kafka-logs指定到用户文件夹下,这样就不受linux系统自动清理的影响了。不过不确定这种会丢失什么信息,最好的方式是在节点停掉之后将原来/tmp/kafka-logs下的文件拷贝到新路径下。