broker失败,因为所有日志目录都失败了

gmol1639  于 2021-06-07  发布在  Kafka
关注(0)|答案(7)|浏览(324)

我正在尝试在windows操作系统上进行一个简单的kafka配置。我的zookeeper和kafka安装使用默认配置(数据和日志目录路径除外)。我可以启动Kafka和生产/消费信息没有问题;但是,当代理尝试删除旧消息时(我将日志保留设置为100毫秒),会出现以下错误:

java.nio.file.FileSystemException: C:\Workspace\kafka_2.11-1.1.0\kafka-logs\discrete-topic-0\00000000000000000000.log -> C:\Workspace\kafka_2.11-1.1.0\kafka-logs\discrete-topic-0\00000000000000000000.log.deleted: 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.WindowsFileCopy.move(WindowsFileCopy.java:387)
        at sun.nio.fs.WindowsFileSystemProvider.move(WindowsFileSystemProvider.java:287)
        at java.nio.file.Files.move(Files.java:1395)
        at org.apache.kafka.common.utils.Utils.atomicMoveWithFallback(Utils.java:697)
        at org.apache.kafka.common.record.FileRecords.renameTo(FileRecords.java:212)
        at kafka.log.LogSegment.changeFileSuffixes(LogSegment.scala:415)
        at kafka.log.Log.kafka$log$Log$$asyncDeleteSegment(Log.scala:1601)
        at kafka.log.Log.kafka$log$Log$$deleteSegment(Log.scala:1588)
        at kafka.log.Log$$anonfun$deleteSegments$1$$anonfun$apply$mcI$sp$1.apply(Log.scala:1170)
        at kafka.log.Log$$anonfun$deleteSegments$1$$anonfun$apply$mcI$sp$1.apply(Log.scala:1170)
        at scala.collection.mutable.ResizableArray$class.foreach(ResizableArray.scala:59)
        at scala.collection.mutable.ArrayBuffer.foreach(ArrayBuffer.scala:48)
        at kafka.log.Log$$anonfun$deleteSegments$1.apply$mcI$sp(Log.scala:1170)
        at kafka.log.Log$$anonfun$deleteSegments$1.apply(Log.scala:1161)
        at kafka.log.Log$$anonfun$deleteSegments$1.apply(Log.scala:1161)
        at kafka.log.Log.maybeHandleIOException(Log.scala:1678)
        at kafka.log.Log.deleteSegments(Log.scala:1161)
        at kafka.log.Log.deleteOldSegments(Log.scala:1156)
        at kafka.log.Log.deleteRetentionMsBreachedSegments(Log.scala:1228)
        at kafka.log.Log.deleteOldSegments(Log.scala:1222)
        at kafka.log.LogManager$$anonfun$cleanupLogs$3.apply(LogManager.scala:854)
        at kafka.log.LogManager$$anonfun$cleanupLogs$3.apply(LogManager.scala:852)
        at scala.collection.TraversableLike$WithFilter$$anonfun$foreach$1.apply(TraversableLike.scala:733)
        at scala.collection.immutable.List.foreach(List.scala:392)
        at scala.collection.TraversableLike$WithFilter.foreach(TraversableLike.scala:732)
        at kafka.log.LogManager.cleanupLogs(LogManager.scala:852)
        at kafka.log.LogManager$$anonfun$startup$1.apply$mcV$sp(LogManager.scala:385)
        at kafka.utils.KafkaScheduler$$anonfun$1.apply$mcV$sp(KafkaScheduler.scala:110)
        at kafka.utils.CoreUtils$$anon$1.run(CoreUtils.scala:62)
        at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
        at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:308)
        at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$301(ScheduledThreadPoolExecutor.java:180)
        at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:294)
        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:748)
        Suppressed: java.nio.file.FileSystemException: C:\Workspace\kafka_2.11-1.1.0\kafka-logs\discrete-topic-0\00000000000000000000.log -> C:\Workspace\kafka_2.11-1.1.0\kafka-logs\discrete-topic-0\00000000000000000000.log.deleted: 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.WindowsFileCopy.move(WindowsFileCopy.java:301)
                at sun.nio.fs.WindowsFileSystemProvider.move(WindowsFileSystemProvider.java:287)
                at java.nio.file.Files.move(Files.java:1395)
                at org.apache.kafka.common.utils.Utils.atomicMoveWithFallback(Utils.java:694)
                ... 32 more

And then...

[2018-08-01 18:14:01,479] INFO [ReplicaManager broker=0] Stopping serving replicas in dir C:\Workspace\kafka_2.11-1.1.0\kafka-logs (kafka.server.ReplicaManager)
[2018-08-01 18:14:01,480] ERROR Uncaught exception in scheduled task 'kafka-log-retention' (kafka.utils.KafkaScheduler)
org.apache.kafka.common.errors.KafkaStorageException: Error while deleting segments for discrete-topic-0 in dir C:\Workspace\kafka_2.11-1.1.0\kafka-logs
Caused by: java.nio.file.FileSystemException: C:\Workspace\kafka_2.11-1.1.0\kafka-logs\discrete-topic-0\00000000000000000000.log -> C:\Workspace\kafka_2.11-1.1.0\kafka-logs\discrete-topic-0\00000000000000000000.log.deleted: The process cannot access the file because it is being used by another process.
[2018-08-01 18:14:01,504] INFO Stopping serving logs in dir C:\Workspace\kafka_2.11-1.1.0\kafka-logs (kafka.log.LogManager)
[2018-08-01 18:14:01,508] ERROR Shutdown broker because all log dirs in C:\Workspace\kafka_2.11-1.1.0\kafka-logs have failed (kafka.log.LogManager)

这似乎就是这个问题:https://issues.apache.org/jira/browse/kafka-6188
Kafka版本:Kafka2.11-1.1.0 windows 10 zookeeper版本:3.4.12
我有几个问题:
有人看到过这个问题吗?有解决办法吗?
目前在windows上运行kafka代理是可行的选择吗?我知道windows不支持它,而且似乎存在多个关键问题。
谢谢

2sbarzqh

2sbarzqh1#

当我使用这里描述的默认配置在本地运行zookeeper、kafka服务器、命令行生产者和消费者时,我遇到了类似的问题。
服务器和生产者启动成功,但当我试图启动消费者我立即得到失败的日志问题。
我通过为服务器、生产者和消费者设置不同的日志目录来修复它。由于没有明确的方法为生产者和消费者设置它,我不得不更新他们的开始脚本。我加了一行

set LOG_DIR=/distr/kafka_2.11-2.2.0/producer_logs

kafka_console_producer.bat 以及 /distr/kafka_2.11-2.2.0/consumer_logs 为了 kafka_console_consumer.bat 分别。
修复使用者成功启动后。问题似乎是因为这三个进程都使用相同的日志目录,并且以某种方式相互干扰。

du7egjpx

du7egjpx2#

您可以删除所有Kafka数据。见Kafka文件:
阻止生产者和消费者客户 Ctrl-C ,如果您还没有这样做的话。
阻止Kafka经纪人 Ctrl-C .
最后,停止zookeeper服务器 Ctrl-C .
如果还希望删除本地kafka环境的任何数据,包括沿途创建的任何事件,请运行以下命令:

$ rm -rf /tmp/kafka-logs /tmp/zookeeper
ymdaylpp

ymdaylpp3#

删除kafka代理的日志文件以及zookeeper的数据和日志文件,然后重新启动。在重新启动kafka和zookeeper之前,请记住停止kafka客户端

w51jfk4q

w51jfk4q4#

我正在windows上使用kafka 2.12-2.3.0。对我有效的是将server.properties设置log.dirs=to同时包含日志数据kafka和zookeeper。
例子:
log.dirs=c:/kafka\u 2.12-2.3.0/data/kafka,c:/kafka\u 2.12-2.3.0/data/zookeeper

qfe3c7zg

qfe3c7zg5#

步骤1:指向server.properties文件中的新日志目录并保存该文件
log.dirs=c:\tools\kafka\u 2.11-2.1.0\kafka测试日志
第二步:再次启动Kafka服务器
/bin/windows/kafka-server-start.bat/config/server.properties文件

omqzjyyz

omqzjyyz6#

我尝试了多种方法来解决这个问题:
正在从server.properties中的log.dirs属性所指向的文件夹中删除日志。它确实在一定时间内解决了我的问题,但当我创建了20多个主题时,它就停止工作了,所以每次我启动Kafka服务器时,这个问题就来了。
尝试使用命令“kafka topics--zookeeper”从kafka中删除主题localhost:2181 --delete --topic topicname“但它将我的主题标记为--”marked to be deleted flag“。但没有解决我的问题。
最后我试着删除Kafka的tmp文件夹中的zookeeper和kafka日志,结果成功了,所有的主题都被删除了。

g6ll5ycj

g6ll5ycj7#

我也有同样的kafka行为,但仅仅重命名或清理日志目录并不能起作用。每次我试图启动kakfa时,它都会崩溃(它会生成所有被删除的日志)。
解决方案:
像以前一样删除日志。
转到zookeeper data dir(您可以在\conf\zoo.cfg中找到它)并清除它。重新启动一切,它应该是完全复位。

相关问题