[Kafka错误]—–kafka在window下出现另一个程序正在使用此文件,进程无法访问的错误

  • Post author:
  • Post category:其他



目录


前言——对于只想解决这个问题的程序猿们,可以直接跳到”解决”


1.背景


2.问题


3.原因


4.解决(尾部有提供编译好的kafka包下载链接)


4.1kafka补丁版本下载


4.2编译kafka补丁版本


5.懒人福音


前言——对于只想解决这个问题的程序猿们,可以直接跳到”

解决”

对于只想解决这个问题的程序猿们,可以直接跳到”

解决”

对于只想解决这个问题的程序猿们,可以直接跳到”

解决”

对于只想解决这个问题的程序猿们,可以直接跳到”

解决”

1.背景

之前使用kafka都是在Linux环境下的,没有出现什么kafka本身的问题。但是,目前在做的一个项目需要兼容Window和Linux,在Window环境下使用Kafka时才发现kafka本身对于window的兼容不如Linux。

2.问题

window下对kafka进行测试的时候,发现kafka在上线一段时间之后,出现了错误:

另一个程序正在使用文件,进程无法访问。

20191014100015160.png

3.原因

kafka日志清理策略触发,在window环境下,在打开需要清理的日志的同时,

对该文件进行重命名操作是不被允许的

(linux环境下可以),从而导致kafka宕机。

网上的解决方案最多的就是“

清空kafka的日志文件然后重启kafka

”,这种解决方式在生产环境下显然是不现实的。所以在一开始我又针对情况得出以下两种解决方案:

方案一:修改日志清理策略,将日志清理时间修改为无穷(-1),使kafka数据日志永久存储

缺点:(1)磁盘空间会不断增大

方案二:在window上搭建虚拟机(docker同理,且更麻烦),然后在虚拟机中部署kafka

缺点:(1)运维人员需要懂点linux运维知识(2)增加内存消耗


显然,这两种方案的缺点都让我无法忍受,所以我把视线转向kafka社区寻求帮助





点击此处膜拜大神们的探讨


据了解,原来kafka在window下的这个问题,还并不没有想象中的那么容易,官方目前为止也没有解决方案。换句话说(你们就不要在window下使用kafka啦!)

方案三:不过即便如此,在window下使用kafka的需求还是存在的,所以还是有很多大神们在关注并提出一些解决方案的。其中就有一位大神针对这个问题对kafka源码进行了二次开发。经过测试,他的这个方案在window下确实解决了问题,使得kafka可以在window下使用。但是对于这个方案,kafka的contributor说可能不太安全(就是不能将该补丁整合到官方中)。

4.解决(尾部有提供编译好的kafka包下载链接)

虽然kafka官方说该补丁不太安全,但是官方在目前为止又没有什么作为。而需求确是实实在在存在的,所以在一番考虑之下,我还是打算采用方案三的方式,一劳永逸的解决问题,所以接下来我们就要将该补丁打进,并重新编译kafka。

4.1kafka补丁版本下载

下载该作者的kafka补丁版本


https://github.com/apache/kafka/tree/0baf9c158b5681a55df4de3a0e6193d32b1433ff

4.2编译kafka补丁版本

由于kafka编译是通过gradle的,所以需要先配置好gradle

关于如何配置gradle可以参考这篇文章(转载来的,侵权即删)——

Windows下gradle的安装与配置

关于如何编译kafka,可以参考github——

如何使用gradle编译kafka

编译完之后,就可以得到一个可以在window下使用的kafka包了。

本着“复制-粘贴“的理念(毕竟编译源码还是挺耗时间的),这里提供一个我编译好的kafka包下载链接,下载直接使用即可


5.懒人福音


下载链接:

kafka_2.12-2.3.0-SNAPSHOT【解决不能在window下使用的BUG】

密码:

mfhu



版权声明:本文为chengtanyong4777原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。