目录

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

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在上线一段时间之后,出现了错误:

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

查看kafka进程号 kafka 进程_程序猿

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