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

flink1.7.2 升级1.13.6问题集

大数据技术之_10_Kafka学习_Kafka概述+Kafka集群部署+Kafka工作流程分析+Kafka API实战+Kafka Producer拦截器+Kafka Streams

kafka配置KAFKA_LISTENERS和KAFKA_ADVERTISED_LISTENERS

Kafka(四)集群之kafka

kafka NoClassDefFoundError kafka / Kafka