网上有很多安装Kafka的教程,这里只谈在安装Kafka时可能会出现的一些问题。
在很多网络资料都会谈到要安装Kafka就要先安装zookeeper,启动zookeeper,然后才能启动Kafka。
安装zookeeper基本不会有什么问题,流程很简单:
1、在官网下载压缩包(一定要二进制(binary)的压缩包,即带bin字样的压缩包);
2、复制zookeeper安装目录下的conf目录中的zoo_sample.cfg文件,改为zoo.cfg并修改其中的“dataDir”的值(必须配置,用于配置存储快照文件的目录);
3、配置zookeeper的环境变量。
之后就是Kafka的安装,Kafka不需要配置环境变量,只要在官网(https://kafka.apache.org/downloads#2.4.0)下载Binary downloads下面的Scala版的压缩包(Kafka也要下载二进制Binary 的压缩包,不要下载源码包Source download),然后解压到安装目录下。
此时要先启动zookeeper,我在先前安装的zookeeper目录下使用zkServer命令启动zookeeper,这一步是没问题的,但接下来启动Kafka就会报错:
有的教程会建议在这一步先后执行两个命令(在Kafka安装目录下的bin目录中的windows目录打开CMD终端):
.\zookeeper-server-start.bat ..\..\config\zookeeper.properties
.\kafka-server-start.bat ..\..\config\server.properties
前面一条是启动zookeeper,后一条是启动Kafka。
但这么一来,基本会出现“Address already in use”的报错信息,原因是“在安装zookeeper之后,又开启了zookeeper的server和client。然后又继续安装kafka,而kafka有继续开启zookeeper,导致重复使用端口报错”(https://www.2cto.com/net/201804/739483.html)。我估计zookeeper就是Kafka的服务端,因为前面使用zkServer启动过zookeeper,这里又执行两条命令来启动zookeeper和Kafka,因此报错。
上面这个问题的解决办法就是“停止使用zookeeper的服务,或者直接开启kafka的server和client。而不是使用kafka开启zookeeper”,即直接关掉之前用zkServer命令启动的zookeeper,直接在Kafka中使用下面两条命令:
.\zookeeper-server-start.bat ..\..\config\zookeeper.properties
.\kafka-server-start.bat ..\..\config\server.properties
启动zookeeper和Kafka即可。
之后启动zookeeper和Kafka也建议这样来启动,即不要再在zookeeper的安装目录下使用zkServer来启动zookeeper,因为在使用zkServer启动zookeeper后,即便在Kafka中只执行.\bin\windows\kafka-server-start.bat .\config\server.properties命令启动Kafka,同样会报错,只不过不再是Address already in use。
总结:
在安装Kafka时,直接在Kafka的bin目录中的windows目录下执行下面两条命令,即可启动Kafka:
.\zookeeper-server-start.bat ..\..\config\zookeeper.properties
.\kafka-server-start.bat ..\..\config\server.properties