kafka服务挂掉排查

kafka服务挂掉排查

kafka运行一段时间后,某天突然挂掉了。
通过排查日志得知:

cd /data/kafka/kafka_2.13-3.3.1/logs
ls -alt 
排序下日志,找到挂掉那天的:
vi server.log.2024-10-28-17 

定位到日志

[2024-10-28 17:04:15,463] WARN Stopping serving logs in dir /tmp/kafka-logs (kafka.log.LogManager)
[2024-10-28 17:04:15,466] ERROR Shutdown broker because all log dirs in /tmp/kafka-logs have failed (kafka.log.LogManager)

通过日志得知原因

这个错误信息表明 Kafka 服务因为所有的日志目录(/tmp/kafka-logs)都出现问题而被迫关闭。这通常意味着 Kafka 无法在这些目录中进行读写操作,可能是由于权限问题、磁盘空间不足、或者文件系统错误等原因。以下是一些解决这个问题的步骤:

检查磁盘空间:

确保 /tmp/kafka-logs 所在的磁盘有足够的空间。可以使用 df -h 命令查看磁盘使用情况。

检查目录权限:

Kafka 需要有足够的权限来访问和修改 /tmp/kafka-logs 目录。确保 Kafka 运行的用户(通常是 kafka 用户)有权限读写这个目录。可以使用 ls -ld /tmp/kafka-logs 查看目录权限,并使用 chown 和 chmod 命令调整权限。

检查磁盘错误:

使用 fsck 命令(如果适用的话,取决于文件系统类型)检查磁盘是否有错误。对于某些文件系统,如 ext4,可以在挂载为只读后运行 fsck。

查看 Kafka 日志:

查看 Kafka 的其他日志文件,可能会有更详细的错误信息,帮助诊断问题。

尝试重启 Kafka:

在解决了上述问题后,尝试重启 Kafka 服务。这可以通过 Kafka 的启动脚本或者系统服务管理工具(如 systemctl)来完成。

考虑使用不同的日志目录:

如果 /tmp 目录不适合作为 Kafka 的日志目录(因为它是临时目录,可能会在重启时被清空),考虑在配置文件中指定一个更合适的目录。
我们本次采用更改日志目录来解决:

vim /data/kafka/kafka_2.13-3.3.1/config/server.properties
log.dirs=/data/kafka/kafka-logs

创建目录并授权:

mkdir /data/kafka/kafka-logs
chown admin:admin /data/kafka/kafka-logs -R

需要将原来的日志复制到新目录:

cp /tmp/kafka-logs/* /data/kafka/kafka-logs/ -rf

在Kafka中,cleaner-offset-checkpoint、log-start-offset-checkpoint、recovery-point-offset-checkpoint和replication-offset-checkpoint是四个与日志管理和复制相关的检查点文件。必须要同步到新的日志文件路径下。不然kafka会启动失败。(或者停止zk,将zk日志也删除,全部重新启动)

  • cleaner-offset-checkpoint
    功能:记录每个日志(log)已清理的偏移量(offset)。这是Kafka日志清理机制的关键部分,用于跟踪哪些日志数据已经被清理,从而避免重复清理。
    工作原理:每次日志清理完成后,Kafka会更新这个文件,以记录当前已经清理到的位置。这样,在下一次清理时,Kafka就可以从这个位置开始继续清理。
  • log-start-offset-checkpoint
    功能:记录日志可以返回给客户端的最开始边界,即最早偏移量(earliest offset)。
    初始值:这个值最初被设置为0,但如果日志被定期删除,它会被更新为大于0的值。
    作用:它帮助Kafka确定哪些日志数据是仍然可用的,并且可以被客户端读取。
  • recovery-point-offset-checkpoint
    功能:记录已经被刷写到磁盘的偏移量(offset)。
    重要性:这个检查点对于数据恢复至关重要,因为它标记了哪些数据是已经安全地存储在磁盘上的。
    工作原理:当Kafka崩溃或需要重启时,它会读取这个文件来确定哪些日志数据是已经持久化的,并可以从这些位置开始恢复。
  • replication-offset-checkpoint
    功能:记录已经被复制到其他副本的偏移量。
    作用:这个文件是Kafka复制机制的一部分,它帮助Kafka跟踪哪些数据已经被成功地复制到其他broker上。
    与HW的关系:通常,这个文件会存储每个复制的“高水位”(High Watermark,HW),表示已经被提交的消息。HW以下的数据都是各个复制之间同步的、一致的。

启动kafka:

cd /data/kafka/kafka_2.13-3.3.1/bin/
nohup sh kafka-server-start.sh ../config/server.properties &

查看系统日志:

系统日志(如 /var/log/syslog 或 /var/log/messages)可能包含有关为什么 Kafka 无法访问 /tmp/kafka-logs 的更多信息。

posted @ 2024-10-29 10:26  邹姣姣  阅读(15)  评论(0编辑  收藏  举报