1.问题描述
在正常执行zookeeper服务与kafka服务时,出现以下报错内容
Zookeeper server启动命令
bin\windows\zookeeper-server-start.bat config\zookeeper.properties
Kafka
Kafka broker service 启动命令
bin\windows\kafka-server-start.bat config\server.properties
2.问题分析
在执行kafka启动与zookeeper启动命令的时候都出现这个错误,首先可以排除kafka本身的问题,所以肯定是java的配置问题。
查看java的环境变量以及相应的版本号
再与kafka-run-class.bat文件中的java路径进行比对
比对无误之后再次执行启动命令,发现依旧存在”找不到或无法加载主类“的问题
3.进一步分析
于是就想到了java的CLASSPATH路径问题(其实看到这个问题的时候可以直接找CLASSPATH的麻烦了)
而CLASSPATH是javac编译器的一个环境变量。它的作用与import、package关键字有关。设置Classpath的目的,在于指定类搜索路径,要使用已经编写好的类,前提当然是能够找到它们了,JVM就是通过CLASSPTH来寻找类的.class文件。我们需要把jdk安装目录下的lib子目录中的dt.jar和tools.jar设置到CLASSPATH中,当然,当前目录“.”也必须加入到该变量中。此处的报错内容就是kafka找不到dt.jar与tools.jar两个包中的类
查看CLASSPATH
发现其中的第一个路径中存在Java jdk,路径中是不允许存在空格的,其中整个路径上前面的“.”不可少,它代表了我们为自己的java类建立的工作路径,其它的是jdk自带的标准类库路径。
然后再次执行,出现新的问题
此外,提一句windows中配置环境变量需要注意的地方:路径组件既不能包含任何控制字符,也不能包含以下字符:/"<>|
这个就是kafka-run-class.bat文件中CLASSPATH没有配置好的问题
要严格按照这个进行配置
set COMMAND=%JAVA% %KAFKA_HEAP_OPTS% %KAFKA_JVM_PERFORMANCE_OPTS% %KAFKA_JMX_OPTS% %KAFKA_LOG4J_OPTS% -cp "%CLASSPATH%" %KAFKA_OPTS% %*
网上的有一些其他版本,比如
set COMMAND=%JAVA% %KAFKA_HEAP_OPTS% %KAFKA_JVM_PERFORMANCE_OPTS% %KAFKA_JMX_OPTS% %KAFKA_LOG4J_OPTS% -cp "%CLASSPATH%" %KAFKA_OPTS% %
或者程序本身
set COMMAND=%JAVA% %KAFKA_HEAP_OPTS% %KAFKA_JVM_PERFORMANCE_OPTS% %KAFKA_JMX_OPTS% %KAFKA_LOG4J_OPTS% -cp %CLASSPATH% %KAFKA_OPTS% %
多*或者少”“都是有问题的。
最后也是成功运行