简体   繁体   English

如何在 Java 中生成 kafka 生产者

[英]How can I produce a kafka producer in Java

I'm trying to create a java instance of a Kafka producer which throws this error, but when I run the console producer it works.我正在尝试创建一个抛出此错误的 Kafka 生产者的 Java 实例,但是当我运行控制台生产者时,它可以工作。

I believe the error stems from as the imports我相信错误源于进口

The error:错误:

[main] INFO org.apache.kafka.common.utils.AppInfoParser - Kafka version: 2.6.0
[main] INFO org.apache.kafka.common.utils.AppInfoParser - Kafka commitId: 62abe01bee039651
[main] INFO org.apache.kafka.common.utils.AppInfoParser - Kafka startTimeMs: 1602094910199
[kafka-producer-network-thread | producer-1] ERROR org.apache.kafka.common.utils.KafkaThread - Uncaught exception in thread 'kafka-producer-network-thread | producer-1':
java.lang.NoClassDefFoundError: com/fasterxml/jackson/databind/JsonNode
    at org.apache.kafka.common.requests.ApiVersionsRequest$Builder.<clinit>(ApiVersionsRequest.java:36)
    at org.apache.kafka.clients.NetworkClient.handleConnections(NetworkClient.java:910)
    at org.apache.kafka.clients.NetworkClient.poll(NetworkClient.java:555)
    at org.apache.kafka.clients.producer.internals.Sender.runOnce(Sender.java:325)
    at org.apache.kafka.clients.producer.internals.Sender.run(Sender.java:240)
    at java.base/java.lang.Thread.run(Thread.java:832)
Caused by: java.lang.ClassNotFoundException: com.fasterxml.jackson.databind.JsonNode
    at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:602)
    at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178)
    at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:522)
    ... 6 more
[main] INFO org.apache.kafka.clients.producer.KafkaProducer - [Producer clientId=producer-1] Closing the Kafka producer with timeoutMillis = 9223372036854775807 ms.

If you're using just kafka-clients dependency as you can see in the documentation如果您只使用kafka-clients依赖项,如您在文档中所见

<dependency>
  <groupId>org.apache.kafka</groupId>
  <artifactId>kafka-clients</artifactId>
  <version>2.6.0</version>
</dependency>

You should notice that in it's pom.xml the dependency to jackson-databind is marked as provided , meaning - it expects/assumes that you'll be running your consumer inside a web container, which most likely has it's own implementation and does not want to interfere.您应该注意到在pom.xml 中,对jackson-databind的依赖被标记为provided ,这意味着 - 它期望/假设您将在 Web 容器中运行您的使用者,该容器很可能有自己的实现并且不想要干扰。

However, if you're running in a jvm that doesn't have jackson in classpath already - then just add whatever version you like in your own pom.xml但是,如果您在类路径中没有jacksonjvm中运行 - 那么只需在您自己的pom.xml添加您喜欢的任何版本

<dependency>
  <groupId>com.fasterxml.jackson.core</groupId>
  <artifactId>jackson-databind</artifactId>
  <version>2.10.5</version> <!-- latest? -->
</dependency>

( Although it's quite likely that you might need more than that one ) (尽管您很可能需要不止一个)

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM