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:未找到快照,但有日志条目。东西坏了的主要内容,如果未能解决你的问题,请参考以下文章
Zookeeper -- 初识ZookeeperZookeeper的安装和配置Zookeeper命令操作(Zookeeper数据模型 Zookeeper服务端 / 客户端常用命令)