2012-05-04 148 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)