运行ZooKeeper实例时遭遇Classpath is empty错误求助
我在Windows上折腾Kafka和ZooKeeper的时候也碰到过类似启动失败的情况,给你几个针对性的排查步骤,应该能帮你定位问题:
检查Java环境配置:ZooKeeper依赖Java运行环境,先打开命令提示符输入
java -version,确认能正常输出Java版本信息。同时要确保系统的JAVA_HOME环境变量指向JDK的根目录(不是JRE),比如C:\Program Files\Java\jdk1.8.0_301,并且Path变量里已经添加了%JAVA_HOME%\bin。核对ZooKeeper配置文件:找到Kafka解压目录下的
config/zookeeper.properties文件,重点检查dataDir配置项。Windows下路径要注意格式,要么用正斜杠dataDir=C:/kafka/zookeeper-data,要么用双反斜杠dataDir=C:\\kafka\\zookeeper-data。另外,这个配置的目录必须手动创建好,不然ZooKeeper启动时会因为无法写入数据目录报错。排查端口占用情况:ZooKeeper默认使用2181端口,打开命令提示符运行
netstat -ano | findstr :2181,如果有返回结果,说明端口被其他进程占用了。你可以选择杀掉占用端口的进程(用taskkill /F /PID 进程号,进程号就是返回结果里最后一列的数字),或者修改zookeeper.properties里的clientPort项,换成比如2182这类未被占用的端口。确认启动命令的正确性:Windows下要使用Kafka自带的Windows脚本启动,正确的命令是在Kafka根目录下执行:
.\bin\windows\zookeeper-server-start.bat .\config\zookeeper.properties别误用了Linux版本的
.sh脚本,这是很多Windows用户容易踩的坑。查看日志定位细节问题:如果上面的步骤都没解决,去Kafka根目录下的
logs文件夹(或者zookeeper.properties里配置的dataLogDir目录)找最新的ZooKeeper日志文件,里面会有更详细的错误堆栈信息,比如权限不足、配置语法错误等,能帮你精准定位问题。
内容的提问来源于stack exchange,提问作者Som Bhattacharyya

