> 技术文档 > windows启动kafka4.0(不再需要zookeeper)_kafka windows

windows启动kafka4.0(不再需要zookeeper)_kafka windows


下载Kafka4.0

  Kafka下载地址为:https://kafka.apache.org/downloads
  注意:下载Binary,不要下载Source,因为它是源码。也不要因为Binary是.tgz文件就觉得它是Linux版本,其实Linux和Windows都是这个文件。后面会解释

windows启动kafka4.0(不再需要zookeeper)_kafka windows

  下载后入下图所示:

windows启动kafka4.0(不再需要zookeeper)_kafka windows

  解压后,如下图所示:

windows启动kafka4.0(不再需要zookeeper)_kafka windows

  注意,解压后的目录跟压缩包的名字是一样的,都是kafka_2.13-4.0.0,我本地是14.kafka_2.13-4.0.0,是因为我改过。而且logs目录是我新建的,并不是Kafka自带的。后面会提到

  可能有些同学有疑惑了。怎么Kafka的压缩包是kafka_2.13-4.0.0,那么长的数字是什么意思啊。前面的2.13是编译Kafka源代码的Scala编译期版本,真正的Kafka版本号实际上是4.0.0。其中4代表大版本号,中间的0表示小版本号,最后的0表示修订版本号,如果是1,就表示第一次打补丁,如果是2,表示第二次打补丁

windows启动脚本

  可以看到,bin目录下全是.sh文件,这明显是Linux下的脚本。但是第一行有个windows文件夹,windows环境下的启动脚本就在这个文件夹下

windows启动kafka4.0(不再需要zookeeper)_kafka windows

  windows目录下都是.bat文件,其中启动Kafka的脚本文件就是kafka-server-start.bat

windows启动kafka4.0(不再需要zookeeper)_kafka windows

修改配置文件

  config目录下有个server.properties文件

windows启动kafka4.0(不再需要zookeeper)_kafka windows

  只需要修改log.dirs,值是存放日志的目录。前面提到过,kafka目录下的logs目录是我新建的,不是kafka自带的。注意:使用两个反向斜杠

windows启动kafka4.0(不再需要zookeeper)_kafka windows

  由于Kafka4.0版本不需要Zookeeper,所以不需要再配置Zookeeper了。这点非常好,省了不少事

JDK 要求

  Kafka4.0要求jdk17,还在使用jdk8的兄弟必须要升级了

格式化存储目录

  在bin/windows目录下,执行脚本,会生成一个随机的cluster.id(集群id)

kafka-storage.bat random-uuid

  虽然有error错误信息,但是这个不影响。我的uuid是5ZClM9zaTmWjhqHrZuBttQ

windows启动kafka4.0(不再需要zookeeper)_kafka windows

  下面用这个uuid来作为cluster.id(集群id)来格式化日志

kafka-storage.bat format --standalone -t 5ZClM9zaTmWjhqHrZuBttQ -c ..\\..\\config\\server.properties

windows启动kafka4.0(不再需要zookeeper)_kafka windows

  执行命令后,会在logs目录下自动生成元数据信息。不管是否有error信息,只要logs目录下有生成meta.properties文件和__cluster_metadata-0目录就行

windows启动kafka4.0(不再需要zookeeper)_kafka windows

启动kafka

  准备工作已经做完了,最后只需要启动kafka就行

kafka-server-start.bat ..\\..\\config\\server.properties

  别的博客说启动后会打印Kafka的版本信息,但是我的并没有打印,奇怪的很,但是也没报错
windows启动kafka4.0(不再需要zookeeper)_kafka windows

  上图中有个警告,大概意思就是Log4j 1.x已经过期了,需要使用Log4j 2.x。这只是警告,不是报错,不影响Kafka启动

  有个问题,上图中我启动了Kafka,那我下班电脑关机了,第二天上班又需要重新启动Kafka时,需要把所有脚本重新执行一遍吗?
  不需要!!!只需要把最后的启动脚本执行一下就行,也就是下面的脚本:

kafka-server-start.bat ..\\..\\config\\server.properties

测试

  我本地写了个发送消息的GET请求

windows启动kafka4.0(不再需要zookeeper)_kafka windows

  对应的service内容如下:

windows启动kafka4.0(不再需要zookeeper)_kafka windows

  我还写了个消费者

windows启动kafka4.0(不再需要zookeeper)_kafka windows

  正常来说,生产者发送消息,消费者就能监听到并消费。下面我启动项目,由于是GET请求,浏览器输入接口地址就能调用
  可以看到,发送消息是成功的

windows启动kafka4.0(不再需要zookeeper)_kafka windows

  再来看消费者,消费者果然走到了断点,说明消费者监听到了并开始消费。再看看日志中打印的Cluster ID,这就是我们前面执行脚本生成的uuid作为集群ID。这不呼应上了吗

windows启动kafka4.0(不再需要zookeeper)_kafka windows

启动成功

  到此,说明我在windows上启动Kafka是成功的

遇到的问题

  不要把Kafka压缩包放在一个很深的目录下去解压。比如我一开始的目录是这样的,启动脚本所在的目录非常深,执行命令报错:
  输入行太长
  命令语句不正确

windows启动kafka4.0(不再需要zookeeper)_kafka windows

  报错信息太过简单,看得我一脸懵逼,百度都百度不到原因,DeepSeek都查不到。无意中尝试把Kafka压缩包放到一个不是那么深的目录下去解压,执行命令就能成功了