Zookeeper:java.io.IOException:未找到快照,但有日志条目。东西坏了

Posted

技术标签:

【中文标题】Zookeeper:java.io.IOException:未找到快照,但有日志条目。东西坏了【英文标题】:Zookeeper: java.io.IOException: No snapshot found, but there are log entries. Something is broken 【发布时间】:2020-04-28 20:05:13 【问题描述】:

我一直在与Kafka 2.4.0 (2.11) 合作,昨天我不得不出于某种未知原因强行终止该进程。从那以后,由于以下错误,我一直无法启动 Zookeeper:

[2020-01-11 11:12:43,783] ERROR Unexpected exception, exiting abnormally (org.apache.zookeeper.server.ZooKeeperServerMain)
java.io.IOException: No snapshot found, but there are log entries. Something is broken!
    at org.apache.zookeeper.server.persistence.FileTxnSnapLog.restore(FileTxnSnapLog.java:222)
    at org.apache.zookeeper.server.ZKDatabase.loadDataBase(ZKDatabase.java:240)
    at org.apache.zookeeper.server.ZooKeeperServer.loadData(ZooKeeperServer.java:290)
    at org.apache.zookeeper.server.ZooKeeperServer.startdata(ZooKeeperServer.java:450)
    at org.apache.zookeeper.server.NioserverCnxnFactory.startup(NIOServerCnxnFactory.java:764)
    at org.apache.zookeeper.server.ServerCnxnFactory.startup(ServerCnxnFactory.java:98)
    at org.apache.zookeeper.server.ZooKeeperServerMain.runFromConfig(ZooKeeperServerMain.java:144)
    at org.apache.zookeeper.server.ZooKeeperServerMain.initializeAndRun(ZooKeeperServerMain.java:106)
    at org.apache.zookeeper.server.ZooKeeperServerMain.main(ZooKeeperServerMain.java:64)
    at org.apache.zookeeper.server.quorum.QuorumPeerMain.initializeAndRun(QuorumPeerMain.java:128)
    at org.apache.zookeeper.server.quorum.QuorumPeerMain.main(QuorumPeerMain.java:82)

当我搜索此问题时,我发现问题ZOOKEEPER-3513 已报告,这可能会也可能不会解释问题。但是,我发现奇怪的是,如果我删除 Kafka/Zookeeper 目录并从头开始重新下载,问题仍然存在。有谁知道我该如何解决这个问题?

感谢您的帮助

【问题讨论】:

您不需要重新下载任何东西。在这些数据目录之外没有存储任何状态 目录 /tmp/zookeeper 呢? 那不是dataDir吗?此外,您不应该将数据存储在 /tmp 上 您是否尝试过使用issues.apache.org/jira/browse/ZOOKEEPER-3056 中描述的snapshot.0 文件的解决方法? 【参考方案1】:

尝试更改您的 zookeeper 数据目录。 你的 zookeeper 数据目录在 zookeeper.properties 中定义(我认为默认是 /tmp/zookeeper)。

也许您没有删除正确的 zookeeper 目录?

我遇到了同样的问题,这个解决方案奏效了。

注意:我正在试验 Kafka,而不是在生产中使用它。我不知道上面还有什么,除了修复这个错误......

【讨论】:

【参考方案2】:

如果您在 Windows 上,请确保您转义了 zookeeper 临时目录的位置。

dataDir=d:\tmp\zookeeper

【讨论】:

如果您不确定要回答问题的任何信息,您应该通过 cmets 询问他们。【参考方案3】:

检查您有 kafka 文件夹的驱动器上的 tmp/zookeeper 文件夹(比如说 D:/),并删除文件夹 tmp,一旦再次运行 zookeeper,它将自动为您创建.

【讨论】:

这对我有用,在我使用的 Linux 中:rm -rf /tmp/zookeeper/* 我还必须删除代理文件才能使其正常工作。从 /tmp 文件夹中删除了代理文件。【参考方案4】:

从版本 3.4.x 更新到 3.5.6 后,我在 Zookeeper 上遇到了同样的问题。如here 所述。我已经:

    在数据目录中添加了空的 snapshot.0 文件 在 Zookeeper 配置文件中添加了一个属性“zookeeper.snapshot.trust.empty=true”(默认为 zoo.cfg)

【讨论】:

对我来说,它不适用于空的snapshot.0,但在您发布的链接中附加了一个。 +1 不过,这就是解决方法。 从给定的链接下载sanpshot.0并将其粘贴到dataDir。现在,问题是数据目录到底存在哪里?我使用的是 mac,对我来说,dataDir 位于/usr/local/var/run/zookeeper/data/version-2。您可以在 zookeeper 配置文件 (zoo.cfg) 中检查您的 dataDir。只需将version-x 添加到此dataDir。请仔细阅读this评论。【参考方案5】:

为日志创建了一个新目录并在 zoo.cfg 中配置了相同的路径。 成功了:)

【讨论】:

【参考方案6】:

我使用的是 macOS,我的解决方案是删除 dataDir 中的所有内容,默认值应该是 /usr/local/var/lib/zookeeper

【讨论】:

【参考方案7】:

对于使用docker的朋友,我来分享一下我的经验:

我一直在运行 zookeeper confluentinc/cp-zookeeper:5.2.1,如下所示:

 docker run \
    --network kafka-net --name=zookeeper \
    -e ALLOW_ANONYMOUS_LOGIN=yes \
    -e ZOOKEEPER_CLIENT_PORT=2181 \
    -v /tmp/zookeeper-data:/var/lib/zookeeper/data \
    -v /tmp/zookeeper-txn-logs:/var/lib/zookeeper/log \
    -p 2181:2182 confluentinc/cp-zookeeper:5.2.1

不出所料,我可以看到一些文件放在主机上的/tmp/zookeeper-txn-logs/tmp/zookeeper-data 中。清理 /tmp/zookeeper-data 并再次运行后,我收到错误 No snapshot found, but there are log entries。

就我而言,我只需要清除/tmp/zookeeper-txn-logs 上的数据。对于开发/生产环境,我建议遵循文档https://access.redhat.com/documentation/en-us/red_hat_amq/6.3/html/fabric_guide/ensemble-purgetxnlog

【讨论】:

【参考方案8】:

Windows ->

转到存储zookeeper详细信息的tmp文件夹 并删除现有的日志文件

目录路径 = d:\tmp\zookeeper\version-2


Linux ->

路径 = /tmp/zookeeper/version-2

并使用 rm -r log.1

删除所有现有的日志文件

日志文件将再次自动创建并解决问题。


【讨论】:

以上是关于Zookeeper:java.io.IOException:未找到快照,但有日志条目。东西坏了的主要内容,如果未能解决你的问题,请参考以下文章

平衡器在 hdfs HA 中不起作用

Zookeeper集群

Zookeeper -- 初识ZookeeperZookeeper的安装和配置Zookeeper命令操作(Zookeeper数据模型 Zookeeper服务端 / 客户端常用命令)

ZooKeeper集群

ZooKeeper集群

Zookeeper集群部署