我正在使用Kafka Streams,我已经运行了这里找到的示例流,这工作正常。我想知道是否有办法替换以下命令,
./bin/kafka-run-class org.apache.kafka.streams.examples.wordcount.WordCountDemo
使用本地文件而不是 Github 上的此源。我尝试从 Github 复制文件并将其放入本地文件中,streams
如下所示:
./bin/kafka-run-class ./streams/WordCountDemo.java
但它给了我以下错误消息:
Error: Could not find or load main class ..streams.WordCountDemo.java
org.apache.kafka.streams.examples.wordcount 是包含类WordCountDemo的包的名称。将其放在另一个(本地)路径中不会更改包。
如果要使用 streams/WordcountDemo,则必须将包名称更改为 streams。
好的。@Pastafari和我在说同样的话。
- 将 github 的字数统计和所有相关的 jar/classes/etc 复制到本地目录。将它们放入源目录中并编译/运行它们。这是最重要的步骤 - 使用步骤 1-1B 让它们运行。
A. 将源的目标目录添加到类路径中。这是您的.class文件所在的位置。
B. 运行"./bin/kafka-run-class org.apache.kafka.streams.examples.wordcount.WordCountDemo",它使用他们的wordCount类。
当一切都在运行时...
- 将 WordCount 复制到另一个目录(例如,source2)。对其进行更改。您的 WordCount 将位于 source2(目标目录)\org\apache\kafka\streams\examples\wordcount 目录中。您的字数统计将具有相同的包名称。现在有 2 个 WordCount.class 副本,但位于不同的目录中。
- 将类路径更改为"源 2;源" 这告诉类加载器首先查找 source2 目录。然后在源代码中搜索其余内容。
- 运行 "./bin/kafka-run-class org.apache.kafka.streams.examples.wordcount.WordCountDemo" 您的类将首先加载。
你认为正在发生的事情:
Kafka 使用 HTTP 从 GitHub 获取文件WordCountDemo
,并将其用作类。
这不是正在发生的事情。
实际发生的情况:
Kafka要求Java提供一个名为org.apache.kafka.streams.examples.wordcount.WordCountDemo的类。
与你这样做时得到的类完全相同:
import org.apache.kafka.streams.examples.wordcount.WordCountDemo;
...
WordCountDemo demo = new WordCountDemo(...);
在此命令行上,您没有import
语句或类似语句,因此您使用完全限定的类名,其中包括包。
Java 在其类加载器中搜索文件系统右侧的WordCountDemo.class
文件。 它很可能位于类路径某处的.jar
文件中。
您可以通过编译它(并选择性地将其放入 JAR 中)来使自己的类可用。
这与正常的 Java 类加载没有什么不同 - 在任何介绍性的 Java 书籍或教程中阅读它。