Apache Kafka运行1天后自动停止,删除日志可临时恢复,求配置调整方案
Kafka服务异常停止问题配置修改方案
核心问题根源
ZooKeeper默认配置的dataDir指向系统临时目录/tmp,Linux系统会定期清理/tmp目录下超过指定时长的文件,导致ZooKeeper数据丢失、会话过期,Kafka与ZooKeeper断连后自动停止服务,删除日志后临时释放空间/重建ZK数据可短暂恢复,系统清理任务执行后问题会复现。
需要修改的配置项
1. 调整ZooKeeper存储配置(zookeeper.properties)
- 原配置:
dataDir=/tmp/zookeeper
问题:/tmp为系统临时目录,会被定期自动清理
修改为:将存储路径改为非临时目录,示例:
注意修改后需要手动创建对应目录,确保运行Kafka/ZooKeeper的用户有目录读写权限。# 存储ZK快照数据 dataDir=/centos/home/zookeeper/data # 新增配置:单独存储ZK事务日志,提升性能同时避免被清理 dataLogDir=/centos/home/zookeeper/log
2. 调整Kafka日志存储与保留配置(server.properties)
- 原配置:
log.dirs=/centos/home/kafka/tmp/kafka-logs
问题:路径包含tmp标识,存在被系统清理的风险
修改为:改为正式数据存储目录,示例:log.dirs=/centos/home/kafka/data/kafka-logs - 原配置:
#log.retention.bytes=1073741824
问题:仅按7天时间保留日志,未限制总存储大小,容易占满磁盘导致服务崩溃
修改为:打开注释,根据可用磁盘空间调整数值,建议设置为对应磁盘总容量的70%左右,避免磁盘占满。
3. 优化ZooKeeper会话超时配置(server.properties)
新增/调整以下配置,避免网络波动导致ZK会话意外过期:
# ZK连接超时调整为30秒 zookeeper.connection.timeout.ms=30000 # 新增ZK会话超时配置,设为30秒 zookeeper.session.timeout.ms=30000
生效步骤
- 停止Kafka服务,再停止ZooKeeper服务
- 手动创建上述修改后的所有新目录,配置正确的读写权限
- 先启动ZooKeeper,确认运行正常后再启动Kafka,观察服务运行状态即可。
内容的提问来源于stack exchange,提问作者Mastanvali Shaik
相关产品推荐
相关产品推荐

