我正在尝试在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不支持它,而且似乎存在多个关键问题。
谢谢
7条答案
按热度按时间2sbarzqh1#
当我使用这里描述的默认配置在本地运行zookeeper、kafka服务器、命令行生产者和消费者时,我遇到了类似的问题。
服务器和生产者启动成功,但当我试图启动消费者我立即得到失败的日志问题。
我通过为服务器、生产者和消费者设置不同的日志目录来修复它。由于没有明确的方法为生产者和消费者设置它,我不得不更新他们的开始脚本。我加了一行
至
kafka_console_producer.bat
以及/distr/kafka_2.11-2.2.0/consumer_logs
为了kafka_console_consumer.bat
分别。修复使用者成功启动后。问题似乎是因为这三个进程都使用相同的日志目录,并且以某种方式相互干扰。
du7egjpx2#
您可以删除所有Kafka数据。见Kafka文件:
阻止生产者和消费者客户
Ctrl-C
,如果您还没有这样做的话。阻止Kafka经纪人
Ctrl-C
.最后,停止zookeeper服务器
Ctrl-C
.如果还希望删除本地kafka环境的任何数据,包括沿途创建的任何事件,请运行以下命令:
ymdaylpp3#
删除kafka代理的日志文件以及zookeeper的数据和日志文件,然后重新启动。在重新启动kafka和zookeeper之前,请记住停止kafka客户端
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
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文件
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日志,结果成功了,所有的主题都被删除了。
g6ll5ycj7#
我也有同样的kafka行为,但仅仅重命名或清理日志目录并不能起作用。每次我试图启动kakfa时,它都会崩溃(它会生成所有被删除的日志)。
解决方案:
像以前一样删除日志。
转到zookeeper data dir(您可以在\conf\zoo.cfg中找到它)并清除它。重新启动一切,它应该是完全复位。