我在 Windows 环境中以 KRaft 模式(没有 Zookeeper)运行 Kafka 时遇到问题,当 Kafka 尝试删除特定快照文件时,我不断在日志中收到 AccessDeniedException。
以下是日志中的详细错误:
java.nio.file.AccessDeniedException: C:\tmp\kraft-combined-logs\__cluster_metadata- 0\00000000000000943744-0000000001.checkpoint.deleted at java.base/sun.nio.fs.WindowsException.translateToIOException(WindowsException.java:89)
Kafka version: Using KRaft mode (without ZooKeeper)
OS: Windows 10
log.retention.bytes=1073741824 (1 GB)
log.segment.bytes=1073741824 (1 GB)
log.retention.hours=24
log.retention.check.interval.ms=300000 (5 minutes)
到目前为止我尝试过的: 我尝试将 log.segment.bytes 和 log.retention.bytes 增加到 2 GB 以减少段轮换和删除的频率。这并没有解决问题,并且在保留检查间隔期间仍然出现 AccessDeniedException
我手动停止了 Kafka,删除了导致错误的快照文件,然后重新启动了 Kafka。这暂时解决了该问题,但一段时间后,当 Kafka 再次尝试自动删除文件时,该问题再次出现 我使用 Process Explorer(Windows 工具)检查是否有任何其他进程正在锁定文件,但似乎只有 Kafka 正在访问它们。
Kafka 关闭和重启: 我确保 Kafka 在重新启动以释放任何文件锁之前已完全关闭,但问题仍然存在。
这是 Windows 上的常见问题,因为 Kafka 在 Windows 环境下没有自动化测试(Confluence Platform 也不支持在 Windows 上运行 Kafka)。
请使用 WSL2 或 Docker,或 Linux 虚拟机在本地运行 Kafka。