无法启动ZooKeeper进而启动Kafka的技术求助
解决ZooKeeper启动时的路径空格问题
这是典型的Windows环境下用类Unix终端(比如Git Bash)执行Kafka脚本时,Java路径含空格导致的解析错误,我来帮你一步步解决:
错误原因分析
你看到的报错C:\Program: No such file or directory,本质是Java安装在C:\Program Files目录下——这个路径里的空格被bash脚本当成了参数分隔符,原本完整的Java路径被拆成了C:\Program和Files\Java\...两个部分,系统自然找不到不存在的C:\Program程序。
解决方案
方案1:修改Kafka脚本的exec命令(最直接)
打开你的Kafka安装目录下的bin/kafka-run-class.sh文件,找到报错的第306行:
exec $JAVA $KAFKA_HEAP_OPTS $KAFKA_JVM_PERFORMANCE_OPTS $KAFKA_GC_LOG_OPTS $KAFKA_JMX_OPTS $KAFKA_LOG4J_OPTS -cp $CLASSPATH $KAFKA_OPTS "$@"
把其中的$JAVA和$CLASSPATH都加上双引号(避免后续其他路径含空格的问题),修改后变成:
exec "$JAVA" $KAFKA_HEAP_OPTS $KAFKA_JVM_PERFORMANCE_OPTS $KAFKA_GC_LOG_OPTS $KAFKA_JMX_OPTS $KAFKA_LOG4J_OPTS -cp "$CLASSPATH" $KAFKA_OPTS "$@"
保存后重新执行你的启动命令:
./zookeeper-server-start.sh ../config/zookeeper.properties
方案2:把Java安装到无空格的路径(一劳永逸)
如果不想修改脚本,可以把Java迁移到没有空格的目录,比如C:\Java\jdk1.8.0_211,然后更新系统的JAVA_HOME环境变量指向这个新路径,同时用java -version验证终端能正常识别Java命令,之后再启动ZooKeeper就不会有问题了。
方案3:临时指定带引号的Java路径(应急用)
在执行启动命令前,先在终端里手动设置JAVA变量为带引号的完整路径:
export JAVA="C:\Program Files\Java\jdk1.8.0_211\bin\java.exe"
然后再执行你的ZooKeeper启动命令,不过这种方法每次打开终端都要重新设置,适合临时测试。
内容的提问来源于stack exchange,提问作者Bercovici Adrian
相关产品推荐
相关产品推荐

