Kafka 1.0 因 FATAL SHUTDOWN 错误而停止。日志目录失败

Posted

技术标签:

【中文标题】Kafka 1.0 因 FATAL SHUTDOWN 错误而停止。日志目录失败【英文标题】:Kafka 1.0 stops with FATAL SHUTDOWN error. Logs directory failed 【发布时间】:2018-04-20 11:15:52 【问题描述】:

我刚刚升级到Kafka 1.0和zookeeper 3.4.10。起初一切都很好。独立的生产者和消费者按预期工作。在我运行我的代码大约 10 分钟后,Kafka 失败并出现以下错误:

[2017-11-07 16:48:01,304] INFO 停止在目录 C:\Kafka\kafka_2.12-1.0.0\kafka-logs (kafka.log.LogManager) 中提供日志

[2017-11-07 16:48:01,320] FATAL Shutdown broker 因为 C:\Kafka\kafka_2.12-1.0.0\kafka-logs 中的所有日志目录都失败了 (kafka.log.LogManager)

我再次重新安装并重新配置了 Kafka 1.0,同样的事情发生了。如果我尝试重新启动,则会出现同样的错误。

删除日志文件有助于启动 Kafka,但在短暂运行后再次失败。

我跑0.10.2版本很久了,从来没有遇到过这样的情况,长期很稳定。

我已尝试找到解决方案并按照documentation. 中的说明进行操作

这还不是一个生产环境,它是相当简单的设置,一个生产者,一个消费者阅读一个主题。

我不确定这是否与动物园管理员有关。

**更新:** 问题已发布在Apache JIRA board 到目前为止的共识似乎是这是一个 Windows 问题。

【问题讨论】:

Windows 不是 Kafka 代理支持的平台。在 Windows 上报告了类似的问题(link1、link2)。随时提交错误并提供详细信息here 版本 0.10.2.1 在 Windows 上运行良好,我们仍在另一台服务器上运行实例。谢谢你的链接。 我在这里面临完全相同的问题。我正在使用 AWS efs 文件系统来存储 kafka 日志文件。我的错误日志 - >产生的原因:java.nio.file.FileSystemException:/var/lib/kafka/data/ksql_transient_8376289768731246768_1513675960541-KSTREAM-REDUCE-STATE-STORE-0000000003-changelog-1.a9edc755278d425e9227bb03eb0cd55f-delete/.nfs937861751206a94a00000fa2:设备或资源繁忙 目前看来,发生这种情况时唯一的解决方案是从tmp 文件夹中删除所有临时文件。 大卫,感谢您的评论。您指的是哪个 tmp 文件夹?你能添加你的路径吗? 【参考方案1】:

也遇到了这个问题,只清除 kafka-logs 不起作用。您还必须清除 zookeeper。

解决步骤:

    确保停止 zookeeper。

    查看您的 server.properties 文件并在以下条目下找到日志目录。

    Example:
    log.dirs=/tmp/kafka-logs/
    

    删除日志目录及其内容。 Kafka 将在重新启动后重新创建目录。

    查看 zookeeper.properties 文件并在以下条目下找到数据目录。

    Example:
    dataDir=/tmp/zookeeper
    

    删除数据目录及其内容。 Zookeeper 将在重新启动后重新创建目录。

    启动 zookeeper。

    <KAFKA_HOME>bin/zookeeper-server-start.sh -daemon <KAFKA_HOME>config/zookeeper.properties
    

    启动 kakfa 代理。

    <KAFKA_HOME>bin/kafka-server-start.sh -daemon <KAFKA_HOME>config/server.properties
    

    通过查看 logs/kafkaServer.out 日志文件验证代理是否已启动。

【讨论】:

谢谢,这是以前答案中所有步骤的汇编,是的,这在测试时有效,我已经尝试过不止一次。但是,当 Kafka 处于生产状态并出现故障时,它并不能解决问题,因为它需要手动干预和删除所有日志文件,从而删除流中的所有数据。自动重启将失败,因此这不是解决问题的永久解决方案。 这是一个临时修复。这个问题不断地反复发生。真的没有实际的解决方法吗? @emirhosseini 在发布解决方案后我也一直遇到这个问题。我发现了两个问题:当我终止进程时,我使用的是 kill -9 ,将其切换为 kill -s TERM ,每次我不得不终止进程时,它都不会再次导致问题.此外,我的磁盘空间不足,甚至没有意识到这一点。到目前为止,从 11 月下旬到现在一直在运行,没有任何问题,即使我在测试期间出于某种原因不得不终止该进程。 非常感谢当我从 Windows 中的其他帐户启动 Kafka 时遇到了这个问题。我不确定这是否是导致问题的原因,但您的解决方案确实解决了问题。 可能 sigkill 是问题所在 - 我也在做同样的事情 - 没有尝试过您的解决方案,但最好是运行 bin/windows/kafka-server-stop.bat。无论如何,这 一个错误,应该发布给他们@TeilaRei,从某种意义上说,如果服务器出现故障(如中断),那么 kafka 应该恢复。还没有尝试过更新版本的 kafka 可能已经修复了吗?【参考方案2】:

我已经尝试了所有的解决方案,比如

清除 Kafka 日志和 Zookeeper 数据(创建新主题后再次出现问题) 将 log.dirs 路径从正斜杠“/”更改为反斜杠“\”(如 log.dirs=C:\kafka_2.12-2.1.1\data\kafka)创建了名为 C:\kafka_2.12-2.1.1\kafka_2.12-2.1.1datakafka 的文件夹,问题确实停止了,问题得到了解决。

我终于找到了这个link,如果你google kafka log.dirs windows就会得到它

【讨论】:

【参考方案3】:

只需清理C:\Kafka\kafka_2.12-1.0.0\kafka-logs中的日志并重启kafka

【讨论】:

这只是一个临时解决方案,在生产中不能接受。手动清理后(这已经否定了 Kafka 的主要功能之一),它将正常启动,但如果 Kafka 失败,它将永远不会自动重新启动,例如停电或实施了升级。此外,您的数据也会丢失。 它有效。可能是暂时的,但是如果你是刚接触 Kafka 并且需要快速解决这个问题也没关系【参考方案4】:

如果您尝试在 Windows 机器上执行,请尝试以 Windows 方式更改 /config 文件夹中 server.properties 中参数 log.dirs 的路径(如 log.dirs=C:\some_path\some_path_kafLogs)。

默认情况下,此路径将采用 unix 方式(如 /unix/path/)。

这在 Windows 机器上对我有用。

【讨论】:

我从一开始就这样做了,在不同的机器上尝试了不同的路径。 Kafka 启动正常,但如果重新启动,它就找不到这些文件,或者认为它们已锁定。用 Kafka 1.0 试过这个,现在用 2.0。 将路径设置为以下:log.dirs=C:\kafka\kafka_2.11-2.1.0\kafka-logs 导致此错误:ERROR Shutdown broker because all log dirs in C:\ Kafka\kafka_2.11-2.1.0\kafkakafka_2.11-2.1.0kafka-logs 失败(kafka.log.LogManager) 这不是安装时出现的问题,是突然出现的【参考方案5】:

所以这似乎是一个 Windows 问题。

https://issues.apache.org/jira/browse/KAFKA-6188

JIRA 已解决,并且附加了一个未合并的补丁。

https://github.com/apache/kafka/pull/6403

所以你的选择是:

让它在 Windows 上运行并使用补丁构建它 在 unix 风格的文件系统(linux 或 mac)中运行它 也许在 windows 的 docker 上运行它值得一试

【讨论】:

感谢分享。您有机会测试过这些解决方案吗? 还没有。一旦我测试了分支,我将更新。我在 Windows 上运行了 docker,并会尝试。我想看看我是否可以通过增加保留时间来避免崩溃,但这并没有帮助。在 WSL 中运行它并没有多大帮助。【参考方案6】:

删除zookeeper目录下的日志

【讨论】:

这是一个临时解决方案,Kafka的任何生产重启都会因同样的原因而失败。 是的,您可能希望将其包含在代码重新启动中。 Kafka 应该有更好的方法来处理这个问题。【参考方案7】:

对我有用的是删除 kafka 和 zookeeper 日志目录,然后在 kafka 和 zookeeper server.properties 文件中配置我的日志目录路径(可以在 kafka/conf/server.properties 中找到)从通常的斜杠 '/'到反斜杠'\'

【讨论】:

【参考方案8】:

问题在于同时处理 kafka 的日志文件。该任务是延迟所有Kafka线程之间更改的外部日志文件和

主题配置有帮助:

Map<String, String> config = new HashMap<>();
config.put(CLEANUP_POLICY_CONFIG, CLEANUP_POLICY_COMPACT);
config.put(FILE_DELETE_DELAY_MS_CONFIG, "3600000");
config.put(DELETE_RETENTION_MS_CONFIG, "864000000");
config.put(RETENTION_MS_CONFIG, "86400000");

【讨论】:

你是说错误只针对压缩主题?【参考方案9】:

在 windows 上更改为路径分隔符 '' 解决了这个问题,每个都需要一个双反斜杠 ' C:\\path\\logs

【讨论】:

【参考方案10】:

只需删除以下所有日志:

C:\tmp\kafka 日志

并重启 zookeeper 和 kafka 服务器。

【讨论】:

感谢您的建议,当系统投入生产时,这不是永久的解决方案。这在手动或通过脚本完成时确实有效,但需要停止所有进程并消除使用 Kafka 作为自我维护流的好处

以上是关于Kafka 1.0 因 FATAL SHUTDOWN 错误而停止。日志目录失败的主要内容,如果未能解决你的问题,请参考以下文章

Android Wear 应用程序因 FATAL EXCEPTION 崩溃:IntentService[CalendarQueryService]

Spark Kafka Streaming 作业因 InvalidClassException 而失败

Kafka常用命令(v3.1.0)

Kafka从0.7到1.0:过去7年我们踩过哪些坑?

kafka运维:kafka操作日志设置

Kafka 连接器记录写入器因缺少要分配的内存而卡在 S3OutputStream 中,但在几个小时内保持空闲状态并没有失败