在windows docker中托管kafka时删除主题时出现异常

luaexgnf  于 2021-06-07  发布在  Kafka
关注(0)|答案(6)|浏览(471)

我在windows的docker里主持Kafka。使用wurstmeister/kafka docker图像。kafka数据存储在本地windows文件夹中以实现持久性。windows文件夹通过docker卷Map到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
omvjsjqw

omvjsjqw1#

从zookeeper日志文件夹中删除版本2。
删除Kafka日志文件夹中的所有内容。
然后重新启动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

rsl1atfo

rsl1atfo2#

当我尝试删除该主题时,此问题仍然存在于windows for kafka 1.1.0版(kafka 2.12-1.1.0)中。
当尝试重命名logs目录“test-0”时,主题被标记为删除,kafka服务器将失败,java.nio.file.accessdeniedexception
删除整个test-0 logs文件夹没有帮助。重新安装Kafka服务器也没有帮助-即使重新安装后,有关标记为删除的主题的信息仍然存在。
我花了几个小时才弄明白,关于这个主题的信息放在zookeeper的一个日志文件里!

解决方案

停止zookeeper进程。转到zookeeper logs文件夹zookeeper-3.x.x\bin\zookeeper-3.x.xdata\version-2\并删除最新的log.xx文件。重新启动zookeper。重新启动kafka服务器。

mwyxok5s

mwyxok5s3#

这就解决了问题
1.停止Kafka和zookeeper进程。
2.删除所有旧日志目录。
3.将log.dir更改为指向server.properties中的新目录
4.将datadir更改为指向zookeeper.properties中的新目录
然后重新启动zookeeper和kafka服务器:
c:\kafka\u 2.12-2.4.0>zookeeper-server-start.bat.\config\zookeeper.properties
c:\kafka\u 2.12-2.4.0>kafka-server-start.bat.\config\server.properties

mrphzbgm

mrphzbgm4#

1,在server.properties->kafka/config中使用新名称更改log.dir
log.dir=c:/programs/kafka/kafka\u 2.12-2.3.0/kafka-test-logs
2、从c:/programs/kafka/kafka\u 2.12-2.3.0中删除旧的日志文件夹/
3、从c:\programs\zookeeper\apache-zookeeper-3.5.5-bin\data中删除所有日志和快照,或删除存储日志的数据文件夹
此外,我在启动消费者时出错(在控制台生产者中没有可用的领导人Kafka),
我补充说,
端口=9092.host.name=localhost
到server.properties
现在我可以发布和使用消息了

0lvr5msh

0lvr5msh5#

由于java的file.rename函数,删除主题失败。在某些情况下,它在windows环境中的工作方式不同(例如,如果文件正在使用中)。kafka开发人员已经将此函数更改为utils.atomicmovewithfallback(有关详细信息,请参阅本期),但它似乎没有包含在kafka 2.11-0.11.0中。所以你需要使用Kafka版本有这个修正。希望这会有帮助。

cig3rfwq

cig3rfwq6#

在重置共享驱动器的凭据后,我解决了此问题
docker配置>共享驱动器>重置凭据

相关问题