2012-05-04 110 views
9

关于Apache-Kafka messaging queuekafka NoClassDefFoundError kafka/Kafka

我已经从Kafka下载页面下载了Apache Kafka。我已经提取到/opt/apache/installed/kafka-0.7.0-incubating-src

quickstart page说,你需要通过运行来启动饲养员,然后开始卡夫卡:
>bin/kafka-server-start.sh config/server.properties

我使用一个单独的动物园管理员的服务器,所以我编辑config/server.properties指向该动物园管理员实例。

当我运行卡夫卡的指示,在快速启动页面,我得到以下错误:

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来确保动物园管理员实例是从卡夫卡运行的机器访问。一切都好。

为什么我得到这个错误?

回答

11

必须首先通过运行以下命令建立卡夫卡:

> ./sbt update 
> ./sbt package 

只有这样,卡夫卡投入使用。

0

只需添加到以前的答案,如果你正在运行的IntelliJ,并且要运行卡夫卡内的IntelliJ和/或通过它步骤,确保运行

> ./sbt idea 

我轻松地呆了半天试图从头开始创建IntelliJ项目,事实证明,只需要一个命令即可完成它。另外,确保你已经安装了IntelliJ的Scala插件。

5

你应该知道,

./sbt update 
./sbt package 

默认会产生卡夫卡二进制文件斯卡拉2.8.0。如果你需要它不同的版本,你需要做

./sbt "++2.9.2 update" 
./sbt "++2.9.2 package" 

用所需的版本号替换2.9.2。这将做出适当的二进制文件。在一般情况下,当您切换版本中,你应该运行

./sbt clean 

从以前的版本清理的二进制文件。

其实,除此之外,你可能还需要执行这个命令

./sbt "++2.9.2 assembly-package-dependency" 

此命令解决所有的依赖运行卡夫卡,并创建一个只包含这些罐子。然后,启动脚本会将它添加到类路径中,并且您应该拥有所需的所有类。

0

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

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

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

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

0

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

+0

4年前提问这个问题。那时候,源代码选项是唯一的选择。 – summerbulb

0

您可以找到以下

https://kafka.apache.org/downloads.html

源码下载卡夫卡下载页面两种选择:
二进制下载

您已经下载了 “卡夫卡0.7.0-孵化-SRC” 它”源代码

下载Kafka的二进制包 Scala 2.10 - kafka_2.10-0.10.1.1.tgz(asc,md5)