Kafka:无法启动 Kafka - 进程无法访问文件 00000000000000000000.timeindex
Kafka: unable to start Kafka - process can not access file 00000000000000000000.timeindex
卡夫卡爱好者,在这里需要很少的帮助。我无法启动 kafka,因为文件 [=12=]000000000000000000.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[=11=]000000000000000000.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.apply(Log.scala:311)
at kafka.log.Log$$anonfun$loadSegmentFiles.apply(Log.scala:272)
at scala.collection.TraversableLike$WithFilter$$anonfun$foreach.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$$anonfun$$anonfun$apply$$anonfun$apply.apply$mcV$sp(LogManager.scala:172)
at kafka.utils.CoreUtils$$anon.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)
我遇到了同样的问题。我唯一能弄清楚的方法就是删除 C:\tmp\kafka-logs
目录。之后我就可以启动kafka服务器了。
您将丢失数据,偏移将从 0.
开始
java.nio.file.FileSystemException: \installation\kafka_2.11-0.11.0.0\log\test-0[=10=]000000000000000000.timeindex: The process cannot access the file because it is being used by another process.
00000000000000000000.timeindex 正在被另一个进程使用。所以你可以使用以下命令删除进程
$ ps aux | grep zookeeper
$ sudo kill -9 <PID>
这里的PID是zookeeper的进程号
问题还没有解决。此处描述:https://issues.apache.org/jira/browse/KAFKA-1194
ephemeral972 给出了 temporary solution 的 2 种方法:
- [推荐] 您需要清理 zookeeper 路径 /brokers/ids/[] 中的代理 ID。使用 zk-cli tool delete 命令清理路径。启动您的代理并验证它向协调器注册。
- 解决此问题的另一种方法是从 kafka 服务器配置更改您的代理 ID 并重新启动代理。但是,这会损坏您的分区和数据,不推荐使用
建议的方法
按照以下步骤操作:
列出 item.Open zkCli 并获取代理中的所有内容。请参阅下面的屏幕截图。
进入主题并按双标签。您将获得此处列出的所有主题。
然后删除每个主题。
我在 windows 上 运行 kafka 时也遇到了这个错误。
您可以通过更改 sever.properties 文件中的默认配置来避免此错误。
请按照以下步骤操作:
- 进入kafka安装的config文件夹
- 打开 Server.properties 文件
- 您将看到配置
用于存储日志文件的目录的逗号分隔列表:
log.dirs=/tmp/logs/kafka**
将 log.dirs=/tmp/logs/kafka
的值更改为其他值,例如:
log.dirs=/tmp/logs/kafka1
- 现在再次启动您的 kafka-server。
这应该可以解决问题。
我遇到了同样的问题,我就是这样解决的。
更改 log.dirs 中的路径 server.properties
log.dirs=C:\kafka\logs
另一种有效的解决方案:
从以下目录中删除配置的所有文件
kafkalogs\test-0
我在 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 时遇到问题,我只有那些我在代理上删除的主题,所以我可以安全地执行上述步骤并摆脱它。
所有答案都通过删除数据为您提供相同的解决方案,而不是如何预防问题。
实际上,您只需要正确停止 Kafka 和 Zookeepter 即可。
你只需要运行这两个命令
kafka-server-stop.sh
zookeeper-server-stop.sh
那么下次启动就不会出现问题了
我遇到了同样的问题,然后重新启动 kafka 和 zook windows 对我不起作用。
什么对我有用(不要在生产模式下重现它,我不确定它是否可以正常工作,但它可以被 DEVELOPMENT kafka 服务器接受。
在 dev kafka 服务器上:
转到相关目录(例如 \installation\kafka_2.11-0.11.0.0\log\test-0)
并删除除 :
以外的所有文件
00000000000000000000.index
00000000000000000000.log
00000000000000000000.timeindex
leader-epoch-checkpoint
然后重启kafka,对我来说没问题,重启后(zookeeper然后kafka),kafka添加一个.snapshot
文件,一切正常。
这似乎是一个已知问题,在您上次发布消息 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 步)。
恕我直言,上面提到的 JIRA 问题很快就会按照 this comment 进行处理
看来很快就能解决了。
我将 tmp 路径配置如下:(在文件 ./config/server.properties 中)
log.dirs=d:\tmp\kafka-logs
然后我从反斜杠'\'改为'/':
log.dirs=d:/tmp/kafka-logs
并创建文件夹解决问题
对我来说,它在重命名日志文件后有效
log.dirs=D:/kafka_2.13-2.4.0/data/kafka到kafka1.
同时修改了log.retention.hours=1,避免重复issue
解决方案:在 Windows 中手动删除日志。并重启 kafka-server 或 broker
正在查找日志存储位置。
转到server.properties
#############################日志基础################### ##########
用于存储日志文件的目录的逗号分隔列表
log.dirs=/这个位置/
这是给windows的:
在 powershell 中使用以下命令终止端口“9092”和“2181”上的进程 运行。
netstat -aon | findstr 'yourPortNumberHere'
taskkill /pid <pid here> f
运行 以上两个端口的命令。
卡夫卡爱好者,在这里需要很少的帮助。我无法启动 kafka,因为文件 [=12=]000000000000000000.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[=11=]000000000000000000.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.apply(Log.scala:311)
at kafka.log.Log$$anonfun$loadSegmentFiles.apply(Log.scala:272)
at scala.collection.TraversableLike$WithFilter$$anonfun$foreach.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$$anonfun$$anonfun$apply$$anonfun$apply.apply$mcV$sp(LogManager.scala:172)
at kafka.utils.CoreUtils$$anon.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)
我遇到了同样的问题。我唯一能弄清楚的方法就是删除 C:\tmp\kafka-logs
目录。之后我就可以启动kafka服务器了。
您将丢失数据,偏移将从 0.
开始java.nio.file.FileSystemException: \installation\kafka_2.11-0.11.0.0\log\test-0[=10=]000000000000000000.timeindex: The process cannot access the file because it is being used by another process.
00000000000000000000.timeindex 正在被另一个进程使用。所以你可以使用以下命令删除进程
$ ps aux | grep zookeeper
$ sudo kill -9 <PID>
这里的PID是zookeeper的进程号
问题还没有解决。此处描述:https://issues.apache.org/jira/browse/KAFKA-1194
ephemeral972 给出了 temporary solution 的 2 种方法:
- [推荐] 您需要清理 zookeeper 路径 /brokers/ids/[] 中的代理 ID。使用 zk-cli tool delete 命令清理路径。启动您的代理并验证它向协调器注册。
- 解决此问题的另一种方法是从 kafka 服务器配置更改您的代理 ID 并重新启动代理。但是,这会损坏您的分区和数据,不推荐使用
按照以下步骤操作:
列出 item.Open zkCli 并获取代理中的所有内容。请参阅下面的屏幕截图。
进入主题并按双标签。您将获得此处列出的所有主题。
然后删除每个主题。
我在 windows 上 运行 kafka 时也遇到了这个错误。 您可以通过更改 sever.properties 文件中的默认配置来避免此错误。
请按照以下步骤操作:
- 进入kafka安装的config文件夹
- 打开 Server.properties 文件
- 您将看到配置
用于存储日志文件的目录的逗号分隔列表:
log.dirs=/tmp/logs/kafka**
将 log.dirs=/tmp/logs/kafka
的值更改为其他值,例如:
log.dirs=/tmp/logs/kafka1
- 现在再次启动您的 kafka-server。
这应该可以解决问题。
我遇到了同样的问题,我就是这样解决的。
更改 log.dirs 中的路径 server.properties log.dirs=C:\kafka\logs
另一种有效的解决方案: 从以下目录中删除配置的所有文件 kafkalogs\test-0
我在 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 时遇到问题,我只有那些我在代理上删除的主题,所以我可以安全地执行上述步骤并摆脱它。
所有答案都通过删除数据为您提供相同的解决方案,而不是如何预防问题。
实际上,您只需要正确停止 Kafka 和 Zookeepter 即可。
你只需要运行这两个命令
kafka-server-stop.sh
zookeeper-server-stop.sh
那么下次启动就不会出现问题了
我遇到了同样的问题,然后重新启动 kafka 和 zook windows 对我不起作用。 什么对我有用(不要在生产模式下重现它,我不确定它是否可以正常工作,但它可以被 DEVELOPMENT kafka 服务器接受。
在 dev kafka 服务器上: 转到相关目录(例如 \installation\kafka_2.11-0.11.0.0\log\test-0) 并删除除 :
以外的所有文件00000000000000000000.index
00000000000000000000.log
00000000000000000000.timeindex
leader-epoch-checkpoint
然后重启kafka,对我来说没问题,重启后(zookeeper然后kafka),kafka添加一个.snapshot
文件,一切正常。
这似乎是一个已知问题,在您上次发布消息 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 步)。 恕我直言,上面提到的 JIRA 问题很快就会按照 this comment 进行处理 看来很快就能解决了。
我将 tmp 路径配置如下:(在文件 ./config/server.properties 中)
log.dirs=d:\tmp\kafka-logs
然后我从反斜杠'\'改为'/':
log.dirs=d:/tmp/kafka-logs
并创建文件夹解决问题
对我来说,它在重命名日志文件后有效 log.dirs=D:/kafka_2.13-2.4.0/data/kafka到kafka1.
同时修改了log.retention.hours=1,避免重复issue
解决方案:在 Windows 中手动删除日志。并重启 kafka-server 或 broker
正在查找日志存储位置。
转到server.properties #############################日志基础################### ##########
用于存储日志文件的目录的逗号分隔列表
log.dirs=/这个位置/
这是给windows的:
在 powershell 中使用以下命令终止端口“9092”和“2181”上的进程 运行。
netstat -aon | findstr 'yourPortNumberHere'
taskkill /pid <pid here> f
运行 以上两个端口的命令。