kafka NoClassDefFoundError kafka / Kafka

时间:2012-05-04 08:48:57

标签: noclassdeffounderror apache-zookeeper apache-kafka

关于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实例。一切都很好。

为什么我会收到此错误?

7 个答案:

答案 0 :(得分:14)

您必须先运行以下命令来构建Kafka:

> ./sbt update
> ./sbt package 

只有这样才能使用Kafka。

答案 1 :(得分:7)

你应该知道

./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。然后启动脚本会将其添加到类路径中,您应该拥有所有所需的类。

答案 2 :(得分:4)

似乎没有SCALA_VERSION环境变量,可执行文件不知道如何加载必要的库。从Kafka安装目录中尝试以下操作:

SCALA_VERSION=2.9.3 bin/kafka-server-start.sh config/server.properties

请参阅http://kafka.apache.org/documentation.html#quickstart

答案 3 :(得分:1)

只是添加到上一个答案,如果你正在运行IntelliJ,并想在IntelliJ中运行Kafka和/或单步执行它,请确保运行

> ./sbt idea

我花了半天的时间尝试从头开始创建IntelliJ项目,事实证明,只需要一个命令即可让它工作。另外,请确保已安装IntelliJ的Scala插件。

答案 4 :(得分:1)

您还可以使用Apache提供的二进制下载。

例如,从此link下载kafka版本 - 0.9.0.1。

link2下载其他版本并下载二进制版本。这些已经是内置版本。不需要使用Scala再次构建。

使用正在使用源代码下载。

答案 5 :(得分:1)

您已下载源版本。下载Kafka的二进制包并继续进行测试。

答案 6 :(得分:1)

您可以在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)