java - 线程“kafka-生产者-网络-线程”中未捕获的异常 |生产者1

标签 java spring-boot apache-kafka spring-kafka

生产到kafka后,日志中出现未捕获的异常。但成功生产了卡夫卡的饲料。我想了解为什么会出现此日志、其严重性以及如何修复它。谢谢!

pom.xml 中的 Kafka 依赖项如下所示:

<dependency>
   <groupId>org.apache.kafka</groupId>
   <artifactId>kafka-streams</artifactId>
</dependency>

<dependency>
    <groupId>org.springframework.kafka</groupId>
    <artifactId>spring-kafka</artifactId>
</dependency>

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

我的生产者配置如下所示:

@Bean
public ProducerFactory<String, Object> jsonProducerFactory() {
    Map<String, Object> configProps = new HashMap<>();
    configProps.put(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG, kafkaBootstrapServers);
    configProps.put(ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG, StringSerializer.class);
    configProps.put(ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG, JsonSerializer.class);
    configProps.put(ProducerConfig.BATCH_SIZE_CONFIG, 500);
    configProps.put(ProducerConfig.LINGER_MS_CONFIG, 1000);
    configProps.put(ProducerConfig.RETRIES_CONFIG, 0);
    configProps.put(ProducerConfig.BUFFER_MEMORY_CONFIG, 50000000);
    configProps.put(ProducerConfig.MAX_REQUEST_SIZE_CONFIG, 5048576);
    return new DefaultKafkaProducerFactory<>(configProps);
}

@Bean
public KafkaTemplate<String, Object> jsonKkafkaTemplate() {
    return new KafkaTemplate<>(jsonProducerFactory());
}

我有这个日志:

java.lang.NoSuchMethodError: org.apache.kafka.clients.producer.Producer.close(Ljava/time/Duration;)V
    at org.springframework.kafka.core.KafkaTemplate.closeProducer(KafkaTemplate.java:382) ~[spring-kafka-2.3.1.RELEASE.jar:2.3.1.RELEASE]
    at org.springframework.kafka.core.KafkaTemplate.lambda$buildCallback$4(KafkaTemplate.java:433) ~[spring-kafka-2.3.1.RELEASE.jar:2.3.1.RELEASE]
    at org.apache.kafka.clients.producer.KafkaProducer$InterceptorCallback.onCompletion(KafkaProducer.java:1235) ~[kafka-clients-2.0.0.jar:na]
    at org.apache.kafka.clients.producer.internals.ProducerBatch.completeFutureAndFireCallbacks(ProducerBatch.java:201) ~[kafka-clients-2.0.0.jar:na]
    at org.apache.kafka.clients.producer.internals.ProducerBatch.done(ProducerBatch.java:187) ~[kafka-clients-2.0.0.jar:na]
    at org.apache.kafka.clients.producer.internals.Sender.completeBatch(Sender.java:599) ~[kafka-clients-2.0.0.jar:na]
    at org.apache.kafka.clients.producer.internals.Sender.completeBatch(Sender.java:575) ~[kafka-clients-2.0.0.jar:na]
    at org.apache.kafka.clients.producer.internals.Sender.handleProduceResponse(Sender.java:485) ~[kafka-clients-2.0.0.jar:na]
    at org.apache.kafka.clients.producer.internals.Sender.access$100(Sender.java:74) ~[kafka-clients-2.0.0.jar:na]
    at org.apache.kafka.clients.producer.internals.Sender$1.onComplete(Sender.java:700) ~[kafka-clients-2.0.0.jar:na]
    at org.apache.kafka.clients.ClientResponse.onComplete(ClientResponse.java:109) ~[kafka-clients-2.0.0.jar:na]
    at org.apache.kafka.clients.NetworkClient.completeResponses(NetworkClient.java:532) ~[kafka-clients-2.0.0.jar:na]
    at org.apache.kafka.clients.NetworkClient.poll(NetworkClient.java:524) ~[kafka-clients-2.0.0.jar:na]
    at org.apache.kafka.clients.producer.internals.Sender.run(Sender.java:239) ~[kafka-clients-2.0.0.jar:na]
    at org.apache.kafka.clients.producer.internals.Sender.run(Sender.java:163) ~[kafka-clients-2.0.0.jar:na]
    at java.lang.Thread.run(Thread.java:745) ~[na:1.8.0_121]

最佳答案

您使用的 Kafka 客户端库与 Spring Kafka 和 Kafka Stream 库不兼容。这是依赖问题;您可以尝试从 Kafka Clients 依赖项中删除该版本,以加载默认兼容版本,或者可以显式指定支持的版本。

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

或者

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

关于java - 线程“kafka-生产者-网络-线程”中未捕获的异常 |生产者1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58708427/

相关文章:

java - 如何在一 block 玻璃板上绘制多个矩形?

java - 关闭选项卡时结账

spring - 如何在Camel sql消费者中启动事务并进一步使用它

Spring Boot 应用程序通过服务器上的物理存在对用户进行身份验证

docker - 远程访问运行在 kubernetes 中的 Kafka

apache-kafka - 卡夫卡消费者从一开始就不消费

spring-boot - Spring-Kafka Consumer KafkaListener无法将GenericMessage转换为Java对象

java - 在非指定方法中交换变量

spring-boot - Spring Boot中如何获取KeyCloak的刷新Token - Jhipster

java - x 必须 < bitmap.width()