kafka NoClassDefFoundError kafka/Kafka
Posted
技术标签:
【中文标题】kafka NoClassDefFoundError kafka/Kafka【英文标题】: 【发布时间】:2012-05-13 19:24:35 【问题描述】:关于Apache-Kafka messaging queue。
我已经从 Kafka 下载页面下载了 Apache Kafka。我已将其提取到/opt/apache/installed/kafka-0.7.0-incubating-src
。
quickstart page 说你需要启动 zookeeper,然后运行 Kafka:>bin/kafka-server-start.sh config/server.properties
我正在使用单独的 Zookeeper 服务器,因此我编辑了 config/server.properties
以指向该 Zookeeper 实例。
当我按照快速入门页面中的说明运行 Kafka 时,我收到以下错误:
Exception in thread "main" java.lang.NoClassDefFoundError: kafka/Kafka
Caused by: java.lang.ClassNotFoundException: kafka.Kafka
at java.net.URLClassLoader$1.run(URLClassLoader.java:200)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
at java.lang.ClassLoader.loadClass(ClassLoader.java:252)
at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:320)
Could not find the main class: kafka.Kafka. Program will exit.
我使用 telnet 确保可以从运行 Kafka 的机器访问 Zookeeper 实例。一切正常。
为什么会出现这个错误?
【问题讨论】:
【参考方案1】:您必须首先通过运行以下命令来构建 Kafka:
> ./sbt update
> ./sbt package
只有这样 Kafka 才能准备好使用。
【讨论】:
【参考方案2】:只是添加到上一个答案中,如果您正在运行 IntelliJ,并且想要在 IntelliJ 中运行 Kafka 和/或单步执行它,请确保运行
> ./sbt idea
我轻松地花了半天时间尝试从头开始创建 IntelliJ 项目,结果证明我只需要一个命令就可以让它工作。另外,请确保您已安装 IntelliJ 的 Scala 插件。
【讨论】:
【参考方案3】:你应该知道
./sbt update
./sbt package
默认情况下将为 Scala 2.8.0 生成 Kafka 二进制文件。如果您需要其他版本,则需要这样做
./sbt "++2.9.2 update"
./sbt "++2.9.2 package"
将 2.9.2 替换为所需的版本号。这将生成适当的二进制文件。一般来说,当你切换版本时,你应该运行
./sbt clean
清理以前版本的二进制文件。
其实,除此之外,你可能还需要执行这个命令
./sbt "++2.9.2 assembly-package-dependency"
此命令解析运行 Kafka 的所有依赖项,并创建一个仅包含这些依赖项的 jar。然后启动脚本会将其添加到类路径中,您应该拥有所有所需的类。
【讨论】:
【参考方案4】:似乎没有SCALA_VERSION
环境变量,可执行文件不知道如何加载必要的库。从 Kafka 安装目录尝试以下操作:
SCALA_VERSION=2.9.3 bin/kafka-server-start.sh config/server.properties
见http://kafka.apache.org/documentation.html#quickstart。
【讨论】:
【参考方案5】:您也可以使用 Apache 提供的二进制下载。
例如从link下载kafka版本 - 0.9.0.1。
对于其他版本,请从link2 下载并改为下载二进制版本。这些是已经构建的版本。无需使用 Scala 再次构建。
使用正在使用源下载代替。
【讨论】:
【参考方案6】:您已下载源版本。下载 Kafka 的二进制包并继续您的测试。
【讨论】:
这个问题是 4 年前提出的。那时,源代码选项是唯一的选择。【参考方案7】:您可以在 Kafka 下载页面找到以下两个选项
https://kafka.apache.org/downloads.html
源码下载: 二进制下载
你已经下载了“kafka-0.7.0-incubating-src”它的源代码
下载Kafka的二进制包 Scala 2.10 - kafka_2.10-0.10.1.1.tgz (asc, md5)
【讨论】:
以上是关于kafka NoClassDefFoundError kafka/Kafka的主要内容,如果未能解决你的问题,请参考以下文章
java.lang.NoClassDefFoundError
大数据技术之_10_Kafka学习_Kafka概述+Kafka集群部署+Kafka工作流程分析+Kafka API实战+Kafka Producer拦截器+Kafka Streams