Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
当Kafka托管在Windows中的Docker中时,删除主题时出现异常_Windows_Docker_Apache Kafka - Fatal编程技术网

当Kafka托管在Windows中的Docker中时,删除主题时出现异常

当Kafka托管在Windows中的Docker中时,删除主题时出现异常,windows,docker,apache-kafka,Windows,Docker,Apache Kafka,我在Windows的Docker中主持卡夫卡。使用docker图像。卡夫卡数据存储在本地Windows文件夹中,以实现持久性。Windows文件夹通过docker卷映射到Kafka docker映像。我可以创建主题、发布和使用消息。但是,当我尝试删除主题时,我收到以下错误: Error while deleting test-0 in dir /var/lib/kafka. (kafka.server.LogDirFailureChannel) java.io.IOException: Fa

我在Windows的Docker中主持卡夫卡。使用docker图像。卡夫卡数据存储在本地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

由于Java的File.rename函数,删除主题失败。它在Windows环境中的某些情况下工作方式不同(例如,如果文件正在使用)。Kafka开发人员已经将此函数更改为Utils.atomicMoveWithFallback(有关详细信息,请参见此),但Kafka 2.11-0.11.0中似乎没有包含此函数。因此,您需要使用具有此修复程序的卡夫卡版本。希望这会有所帮助。

当我尝试删除主题时,此问题仍然存在于Windows for Kafka 1.1.0版(Kafka_2.12-1.1.0)中

当尝试重命名日志目录“test-0”时,该主题被标记为删除,Kafka服务器在java.nio.file.AccessDeniedException下失败

删除整个test-0日志文件夹没有帮助。 重新安装Kafka服务器也无济于事-即使在重新安装后,有关标记为删除的主题的信息仍然保留

我花了几个小时才弄明白关于这个主题的信息在Zookeeper中——在一个日志文件中

解决方案 停止Zookeeper进程。 转到Zookeeper日志文件夹Zookeeper-3.x.x\bin\Zookeeper-3.x.xdata\version-2\并删除最新的log.xx文件。 重新启动Zookeper。
重新启动Kafka服务器。

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中删除所有日志和快照 或者删除存储日志的数据文件夹

此外,我在启动消费者时出错(Leader在Console Producer中不可用Kafka)

我补充说,

端口=9092 advised.host.name=localhost

到server.properties


现在我可以发布和使用消息了

从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
    • 这就解决了问题
      1.停止卡夫卡和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

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


      Docker config>共享驱动器>重置凭据

      卡夫卡是否没有足够的权限执行此操作?请。提供如何启动此容器我有一个docker compose文件,并使用docker compose up-d启动它。我可以创建主题并发布消息,这样卡夫卡就可以访问这个文件夹。我将用docker compose文件内容更新帖子。您正在将/var/lib/kafka映射到主机文件系统。确保允许kafka(1000?)的用户id写入主机路径kafka_日志。基本上,对于具有相同id的用户,您需要在主机上有足够的权限。但正如我所说,我可以创建主题并生成消息。如果我错了请纠正我卡夫卡可以写卡夫卡日志吗?@aholbreich我遇到了同样的问题。我可以问一下如何授予足够的删除该主题的权利吗?我已尝试将delete.topic.enable的Zookeeper属性设置为true,但没有帮助。我还尝试以en-administration的形式运行Eclipse,但仍然不起作用。除了@Oleksandr-answer,还有一个与windows环境中的文件移动/删除相关的未决问题:您链接的问题表明它已修复,但这在windows上仍然是一个问题。您可以创建一个简单的主题,然后立即删除它,在日志目录C:\tmp\kafka日志(kafka.server.LogDirFailureChannel)中重命名test-0的目录时会出现
      错误java.nio.file.AccessDeniedException:C:\tmp\kafka logs\test-0->C:\tmp\kafka logs\test-0.9b7da533fd9d4b1f8ad0e783f16ad1ee-delete
      如果我有合流版本,有人能告诉我zookeeper日志在哪里吗?kafka 2.2仍然存在问题(使用嵌入式kafkarule解决)。在Linux环境下运行良好。@ylka,它应该位于Kafka日志所在的同一文件夹下。更具体地说,如果您在server.properties中设置“C:\tmp\kafka logs”,您将在“C:\tmp\zookeeper”中看到文件夹。我使用的是kafka 2.3.1,此解决方案有效。谢谢,布兰登。windows上的日志文件夹在哪里??因为我找不到它。顺便说一句,我的动物园管理员在docker容器中运行?