首页 > 解决方案 > Kafka 删除段时出错 -> 进程无法访问该文件,因为它正被另一个进程使用

问题描述

您好,我在 Windows 上遇到了 Kafka 的问题。基本上我的问题在这个问题中有所描述所以
在将 log.retention.hours 从 -1 减少到 336 (所以他应该开始删除大量日志)之后,Kafka 在大约 30 分钟后失败,并出现以下错误。

ERROR Uncaught exception in scheduled task 'kafka-log-retention' (kafka.utils.KafkaScheduler)
org.apache.kafka.common.errors.KafkaStorageException: Error while deleting segments for topic-0 in dir D:\kafka
Caused by: java.nio.file.FileSystemException: D:\kafka\topic-0\00000000000113036442.timeindex -> D:\kafka\ topic-0\\00000000000113036442.timeindex.deleted: The process cannot access the file because it is being used by another process.

虽然上面的问题描述了我无法真正找到一个好的解决方案/解决方法的问题。在这个问题中,类似问题的答案是删除数据(或不使用 Windows)。由于两者都不是一个真正的选择,我有点卡住了我应该做的事情。还有其他方法吗?

如果真的没有其他选择,那么删除 Kafka 数据是否可以以某种方式保存偏移量?我正在从另一个集群镜像数据,然后将其写入数据库。因此,如果我删除了所有 Kafka 文件,我会在数据库中获得保留时间的重复数据。或者消费者的索引是否存储在其他地方?有没有一种选择可以避免这种情况,而无需重写消费者?


编辑:

是否可以选择从log.dirs的文件夹中删除主题的分区?MirrorMaker 将重新创建主题,并且由于 consumer_offsets 主题仍然存在,因此不会向消费者发送两次消息。

这能行吗?直接删除文件似乎总是有风险的,但到目前为止这似乎是最好的主意。

标签: apache-kafka

解决方案


推荐阅读