kafka:无法启动kafka-进程无法访问文件00000000000000000000.timeindex

clj7thdc  于 2021-06-08  发布在  Kafka
关注(0)|答案(13)|浏览(912)

Kafka爱好者,这里不需要什么帮助。我无法启动Kafka,因为文件 \00000000000000000000.timeindex 正在被另一个进程使用。以下是日志:

[2017-08-09 22:49:22,811] FATAL [Kafka Server 0], Fatal error during KafkaServer startup. Prepare to shutdown (kafka.server.KafkaServer)
java.nio.file.FileSystemException: \installation\kafka_2.11-0.11.0.0\log\test-0\00000000000000000000.timeindex: The process cannot access the file because it is being used by another process.

        at sun.nio.fs.WindowsException.translateToIOException(WindowsException.java:86)
        at sun.nio.fs.WindowsException.rethrowAsIOException(WindowsException.java:97)
        at sun.nio.fs.WindowsException.rethrowAsIOException(WindowsException.java:102)
        at sun.nio.fs.WindowsFileSystemProvider.implDelete(WindowsFileSystemProvider.java:269)
        at sun.nio.fs.AbstractFileSystemProvider.deleteIfExists(AbstractFileSystemProvider.java:108)
        at java.nio.file.Files.deleteIfExists(Files.java:1165)
        at kafka.log.Log$$anonfun$loadSegmentFiles$3.apply(Log.scala:311)
        at kafka.log.Log$$anonfun$loadSegmentFiles$3.apply(Log.scala:272)
        at scala.collection.TraversableLike$WithFilter$$anonfun$foreach$1.apply(TraversableLike.scala:733)
        at scala.collection.IndexedSeqOptimized$class.foreach(IndexedSeqOptimized.scala:33)
        at scala.collection.mutable.ArrayOps$ofRef.foreach(ArrayOps.scala:186)
        at scala.collection.TraversableLike$WithFilter.foreach(TraversableLike.scala:732)
        at kafka.log.Log.loadSegmentFiles(Log.scala:272)
        at kafka.log.Log.loadSegments(Log.scala:376)
        at kafka.log.Log.<init>(Log.scala:179)
        at kafka.log.Log$.apply(Log.scala:1580)
        at kafka.log.LogManager$$anonfun$loadLogs$2$$anonfun$5$$anonfun$apply$12$$anonfun$apply$1.apply$mcV$sp(LogManager.scala:172)
        at kafka.utils.CoreUtils$$anon$1.run(CoreUtils.scala:57)
        at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
        at java.util.concurrent.FutureTask.run(FutureTask.java:266)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
        at java.lang.Thread.run(Thread.java:745)
[2017-08-09 22:49:22,826] INFO [Kafka Server 0], shutting down (kafka.server.KafkaServer)
blpfk2vs

blpfk2vs1#

我也面临同样的问题,我就是这样解决的。
更改server.properties log.dirs=c:\kafka\logs中的log.dirs路径
另一个有效的解决方案是:从以下目录中删除所有文件,只要配置了kafkalogs\test-0

kgqe7b3p

kgqe7b3p2#

我在windows上也遇到了类似的问题,部分原因是我删除了几个主题(因为我没有找到其他方法只刷新这些主题中的消息)。这就是我的工作。

Change the logs.dir in config/server.properties to new location
Change the dataDir in config/zookeeper.properties to new location
Restart zookeeper and kafka

当你除了在zookeeper/kafka上删除的内容之外没有其他主题可以满足你的需要时,上述内容显然会起作用,如果还有其他主题你仍然想保留配置,我相信@sumit das提出的解决方案可能会起作用。我在windows上启动zkcli时遇到了一些问题,我只有那些在我的代理上删除的主题,所以我可以安全地执行上述步骤并摆脱它。

7rfyedvj

7rfyedvj3#

我将tmp路径配置如下:(在file./config/server.properties中)

log.dirs=d:\tmp\kafka-logs

然后我从反斜杠“\”改为“/”:

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

并创建文件夹来解决问题

ruarlubt

ruarlubt4#

所有答案都提供了相同的解决方案,即删除数据,而不是如何防止问题。
实际上,你只需要适当地阻止Kafka和zookeepter。
您只需按顺序运行这两个命令

kafka-server-stop.sh

zookeeper-server-stop.sh

下一次当你开始的时候,你不会看到任何问题。

watbbzwu

watbbzwu5#

我也有同样的问题。唯一的办法就是删除 C:\tmp\kafka-logs 目录。之后我就可以启动Kafka服务器了。
您将丢失数据,偏移量将从0开始。

cunj1qz1

cunj1qz16#

适用于windows:
在powershell中使用以下命令终止在端口“9092”和“2181”上运行的进程。

netstat -aon | findstr 'yourPortNumberHere' 

taskkill /pid <pid here> f

对两个端口运行以上命令。

qncylg1j

qncylg1j7#

对我来说,它在将日志文件log.dirs=d:/kafka\u 2.13-2.4.0/data/kafka重命名为kafka1后工作。
还修改了log.retention.hours=1,以避免问题重复

ghhkc1vu

ghhkc1vu8#

我也面临同样的问题,重新启动kafka和zook,然后windows对我不起作用。什么对我有效(不要在生产模式下复制它,我不确定它是否可以正常工作,但是它可以被kafka服务器的开发所接受。
在dev kafka服务器上:转到相关目录(例如\installation\kafka\u 2.11-0.11.0.0\log\test-0)并删除除以下文件以外的所有文件:

00000000000000000000.index
00000000000000000000.log
00000000000000000000.timeindex
leader-epoch-checkpoint

然后重启Kafka,对我来说没问题,重启后(zookeeper,然后是Kafka),Kafka添加一个 .snapshot 一切都很好。

ppcbkaq5

ppcbkaq59#

我在windows上运行kafka时也遇到了这个错误。您可以通过更改sever.properties文件中的默认配置来避免此错误。
请遵循以下步骤:
转到kafka安装的config文件夹。
打开server.properties文件
您将看到配置
存储日志文件的目录的逗号分隔列表:

log.dirs=/tmp/logs/kafka**

更改的值 log.dirs=/tmp/logs/kafka 其他值,例如:

log.dirs=/tmp/logs/kafka1

现在再次启动Kafka服务器。
这应该能解决问题。

kxkpmulp

kxkpmulp10#

java.nio.file.FileSystemException: \installation\kafka_2.11-0.11.0.0\log\test-0\00000000000000000000.timeindex: The process cannot access the file because it is being used by another process.

00000000000000.timeindex正在被另一个进程使用。因此,您可以使用以下命令删除进程

$ ps aux | grep zookeeper
$ sudo kill -9 <PID>

这里pid是zookeeper的进程id。
这个问题还没有解决。具体描述如下:https://issues.apache.org/jira/browse/kafka-1194
ephemeral972给出了两种临时解决方案:
[推荐]您需要清理zookeeper path/brokers/ids/[]中的代理ID。使用zk cli tool delete命令清理路径。启动您的代理并验证它是否已向协调员注册。
解决这个问题的另一种方法是从kafka服务器配置中更改代理id并重新启动代理。但是,这会损坏分区,不建议使用数据

ajsxfq5m

ajsxfq5m11#

解决方案:在windows中手动删除日志。重新启动kafka服务器或代理
正在查找日志存储位置。
转到server.properties(服务器属性)#############################
以逗号分隔的目录列表,用于存储日志文件
log.dirs=/此位置/

yftpprvb

yftpprvb12#

这似乎是一个已知的问题,在您上次发布消息168小时后,windows上会触发此问题。很明显,这个问题正在这里追踪和研究:Kafka-8145
有两种解决方法:
根据其他人的建议,您可以清理包含日志文件的目录(或者备份并让log.dirs指向另一个目录)。然而,这样你会失去你的数据。
转到server.properties文件并对其进行以下更改。注意:这是一个临时解决方案,允许您的用户访问并使用任何剩余的数据,这样就不会丢失数据。在获得所有需要的数据之后,您应该返回到步骤1,彻底清理数据文件夹。
将下面的属性更新为规定值


# The minimum age of a log file to be eligible for deletion due to age

log.retention.hours=-1

在属性文件的末尾添加此属性。

log.cleaner.enable=false

本质上,你所做的是告诉kafka代理不要费心删除旧消息,所有消息的年龄现在是无限的,也就是说它们永远不会被删除。如您所见,这显然不是一个理想的状态,因此您应该这样做,以便您能够使用所需的任何内容,然后清理您的文件/目录(步骤1)。imho表示,上述jira问题正在尽快解决,根据这一评论,它似乎很快就会得到解决。

wa7juj8i

wa7juj8i13#

遵循@skywalker建议的方法
按照以下步骤操作:
list item.open zkcli并获取代理中的所有内容。请参见下面的屏幕截图。

进入主题并按双制表符。你将得到这里列出的所有主题。

然后删除每个主题。

相关问题