我在Windows中的Docker中托管Kafka。使用Wurstmeister/Kafka泊坞窗图片。 Kafka数据存储在本地Windows文件夹中以保持持久性。 Windows文件夹通过Docker卷映射到Kafka docker镜像。我可以创建主题,发布和使用消息。但是,当我尝试删除主题时,我收到以下错误:
Error while deleting test-0 in dir /var/lib/kafka. (kafka.server.LogDirFailureChannel)
java.io.IOException: Failed to rename log directory from /var/lib/kafka/test-0 to /var/lib/kafka/test-0.a81ff9700e4e4c3e8b20c6d949971b64-delete
at kafka.log.LogManager.asyncDelete(LogManager.scala:671)
at kafka.cluster.Partition.$anonfun$delete$1(Partition.scala:178)
at kafka.utils.CoreUtils$.inLock(CoreUtils.scala:217)
at kafka.utils.CoreUtils$.inWriteLock(CoreUtils.scala:225)
at kafka.cluster.Partition.delete(Partition.scala:173)
at kafka.server.ReplicaManager.stopReplica(ReplicaManager.scala:341)
at kafka.server.ReplicaManager.$anonfun$stopReplicas$2(ReplicaManager.scala:373)
at scala.collection.Iterator.foreach(Iterator.scala:929)
at scala.collection.Iterator.foreach$(Iterator.scala:929)
at scala.collection.AbstractIterator.foreach(Iterator.scala:1417)
at scala.collection.IterableLike.foreach(IterableLike.scala:71)
at scala.collection.IterableLike.foreach$(IterableLike.scala:70)
at scala.collection.AbstractIterable.foreach(Iterable.scala:54)
at kafka.server.ReplicaManager.stopReplicas(ReplicaManager.scala:371)
at kafka.server.KafkaApis.handleStopReplicaRequest(KafkaApis.scala:190)
at kafka.server.KafkaApis.handle(KafkaApis.scala:104)
at kafka.server.KafkaRequestHandler.run(KafkaRequestHandler.scala:65)
at java.lang.Thread.run(Thread.java:748)
有人可以帮助我解决这个问题吗?
UPD:您可以在下面找到我用来运行Kafka的docker-compose文件的内容:
version: '3'
services:
zookeeper:
image: zookeeper
ports:
- "2181:2181"
environment:
ZOO_MY_ID: 1
volumes:
- ./zookeeper_data:/data
- ./zookeeper_datalog:/datalog
kafka:
depends_on:
- zookeeper
image: wurstmeister/kafka
ports:
- "9092:9092"
environment:
KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
KAFKA_ADVERTISED_HOST_NAME: localhost
KAFKA_LOG_DIRS: /var/lib/kafka
KAFKA_AUTO_CREATE_TOPICS_ENABLE: 'false'
KAFKA_BROKER_ID: 1
volumes:
- ./kafka_logs:/var/lib/kafka
答案 0 :(得分:8)
当我尝试删除主题时,Windows for Kafka ver 1.1.0(kafka_2.12-1.1.0)中仍存在此问题。
当尝试重命名logs目录时,主题被标记为删除并且Kafka服务器因java.nio.file.AccessDeniedException而失败' test-0'
删除整个test-0 logs文件夹没有帮助。 重新安装Kafka服务器也无济于事 - 即使重新安装后,有关标记为删除的主题的信息仍然存在。
花了几个小时才弄清楚有关该主题的信息位于Zookeeper中 - 在其中一个日志文件中!
停止Zookeeper进程。 转到Zookeeper日志文件夹zookeeper-3.x.x \ bin \ zookeeper-3.x.xdata \ version-2 \并删除最新的log.xx文件。 重启Zookeper。 重启Kafka服务器。
答案 1 :(得分:1)
由于Java的File.rename功能,主题删除失败。在某些情况下,它在Windows环境中的工作方式不同(例如,如果文件正在使用中)。 Kafka开发人员已经将此功能更改为 Utils.atomicMoveWithFallback (有关详细信息,请参阅此issue),但似乎未将其包含在Kafka 2.11-0.11.0中。因此,您需要使用具有此修复程序的Kafka版本。希望这会有所帮助。
答案 2 :(得分:0)
从Zookeeper日志文件夹中删除版本2。
删除Kafka-logs文件夹中的所有内容。
然后重新启动Zookeeper和Kafka服务器:
zookeeper-server-start.bat D:\kafka_2.11-2.4.1\config\zookeeper.properties
kafka-server-start.bat D:\kafka_2.11-2.4.1\config\server.properties
答案 3 :(得分:0)
答案 4 :(得分:-1)
1,在server.properties-> Kafka / config中用新名称更改log.dir
log.dir = C:/Programs/kafka/kafka_2.12-2.3.0/kafka-test-logs
2,从C:/Programs/kafka/kafka_2.12-2.3.0 /
中删除旧的日志文件夹3,从C:\ Programs \ zookeeper \ apache-zookeeper-3.5.5-bin \ data中删除所有日志和快照 或删除存储日志的数据文件夹
此外,启动使用者时出现错误(控制台生产者中的“领导者不可用”卡夫卡),
我添加了
端口= 9092 advertised.host.name =本地主机
到server.properties
现在可以发布和使用消息了
答案 5 :(得分:-1)
这解决了问题
1.停止Kafka和Zookeeper进程。
2.删除所有旧日志目录。
3.将log.dir更改为指向server.properties中的新目录
4.将dataDir更改为指向zookeeper.properties中的新目录
然后重新启动Zookeeper和Kafka服务器:
C:\ kafka_2.12-2.4.0> zookeeper-server-start.bat。\ config \ zookeeper.properties
C:\ kafka_2.12-2.4.0> kafka-server-start.bat。\ config \ server.properties