检查本机Kafka 4.3.1的安装目录,看ZooKeeper相关的脚本和配置是否还存在,再用一份老式的zookeeper.connect配置真实尝试启动,看这个版本会怎么响应。
命令 · shell $ ls $KAFKA_HOME/bin | grep -i zoo (真实没有任何输出) $ ls $KAFKA_HOME/config/zookeeper.properties (真实:No such file or directory)
老版本的Kafka发行包里,bin/目录下真实会有zookeeper-server-start.sh、zookeeper-shell.sh这些脚本,config/目录下也真实带着一份zookeeper.properties模板。本机装的Kafka 4.3.1,这些文件真实一个都找不到——不是藏在别的路径,是这个版本的发行包里真实压根没有打包它们。
命令 · shell $ cat zk-style.properties broker.id=99 zookeeper.connect=localhost:2181 log.dirs=/tmp/zk-style-logs $ kafka-server-start.sh zk-style.properties
[ERROR] Exiting Kafka due to fatal exception (kafka.Kafka$) org.apache.kafka.common.config.ConfigException: Missing required configuration "process.roles" which has no default value. at org.apache.kafka.common.config.ConfigDef.parseValue(ConfigDef.java:537) at kafka.server.KafkaConfig.<init>(KafkaConfig.scala:148) at kafka.Kafka$.buildServer(Kafka.scala:65)
这份配置里的zookeeper.connect=localhost:2181真实一个字都没有报错——它不是配置错误,是这个参数真实已经不存在于这个版本的配置体系里了,broker根本不检查它。真正让启动失败的,是process.roles这个KRaft模式的核心参数缺失:这个版本的KafkaConfig真实把process.roles定义成了一个没有默认值的必填项,不填就直接在构造配置对象这一步抛异常,连日志系统都还没真实初始化完。
每一步都是本文上面真实用本机Kafka 4.3.1跑出来的原始结果。