Java 带千分尺的弹簧卡夫卡在应用程序关闭期间抛出NullPointerException
我们有具有多个节点的Java 带千分尺的弹簧卡夫卡在应用程序关闭期间抛出NullPointerException,java,spring-boot,apache-kafka,spring-kafka,micrometer,Java,Spring Boot,Apache Kafka,Spring Kafka,Micrometer,我们有具有多个节点的spring boot应用程序,并使用KafkaTemplate生成kafka消息。在类路径上,我们有org.springframework.kafka:spring-kafka和io.milomer:milomer-core。 在我们的例子中,消息是连续生成的,每个主题(具有多个分区的主题)每秒大约几千条消息。 在应用程序正常关闭期间(重新部署或自动缩小规模期间),我们经常出现NPE错误: [kafka-producer-network-thread | producer-
spring boot
应用程序,并使用KafkaTemplate
生成kafka消息。在类路径上,我们有org.springframework.kafka:spring-kafka
和io.milomer:milomer-core
。
在我们的例子中,消息是连续生成的,每个主题(具有多个分区的主题)每秒大约几千条消息。
在应用程序正常关闭期间(重新部署或自动缩小规模期间),我们经常出现NPE错误:
[kafka-producer-network-thread | producer-1] ERROR org.apache.kafka.clients.producer.internals.ProducerBatch - Error executing user-provided callback on message for topic-partition 'xxx-1'
java.lang.NullPointerException
at io.micrometer.core.instrument.Timer$Sample.stop(Timer.java:280)
at org.springframework.kafka.support.micrometer.MicrometerHolder.success(MicrometerHolder.java:93)
at org.springframework.kafka.core.KafkaTemplate.lambda$buildCallback$4(KafkaTemplate.java:587)
at org.springframework.kafka.core.DefaultKafkaProducerFactory$CloseSafeProducer$1.onCompletion(DefaultKafkaProducerFactory.java:764)
at org.apache.kafka.clients.producer.KafkaProducer$InterceptorCallback.onCompletion(KafkaProducer.java:1348)
at org.apache.kafka.clients.producer.internals.ProducerBatch.completeFutureAndFireCallbacks(ProducerBatch.java:227)
at org.apache.kafka.clients.producer.internals.ProducerBatch.done(ProducerBatch.java:196)
at org.apache.kafka.clients.producer.internals.Sender.completeBatch(Sender.java:707)
at org.apache.kafka.clients.producer.internals.Sender.completeBatch(Sender.java:688)
at org.apache.kafka.clients.producer.internals.Sender.handleProduceResponse(Sender.java:596)
at org.apache.kafka.clients.producer.internals.Sender.access$100(Sender.java:74)
at org.apache.kafka.clients.producer.internals.Sender$1.onComplete(Sender.java:798)
at org.apache.kafka.clients.ClientResponse.onComplete(ClientResponse.java:109)
at org.apache.kafka.clients.NetworkClient.completeResponses(NetworkClient.java:569)
at org.apache.kafka.clients.NetworkClient.poll(NetworkClient.java:561)
at org.apache.kafka.clients.producer.internals.Sender.runOnce(Sender.java:335)
at org.apache.kafka.clients.producer.internals.Sender.run(Sender.java:244)
at java.base/java.lang.Thread.run(Thread.java:834)
我检查了类org.springframework.kafka.support.dimenomer.dimenomerHolder
的实现,发现只有在destroy
方法在success
之前调用时才会发生这种情况。看来我们有一个比赛条件。我想success
方法实现应该以某种方式处理destroy
方法已被调用的情况。
这是《春天卡夫卡》的错误吗
SpringKafka
2.5.1版<代码>测微计芯1.5.1版。如果是2.5.1版
中的错误。由于springkafka
版本2.6.0
问题已得到解决
同时,如果您不需要为KafkaTemplate
使用测微计度量,我们可以禁用它:
kafkaTemplate.setMicrometerEnabled(false);
如果是版本2.5.1
中的错误。由于springkafka
版本2.6.0
问题已得到解决
同时,如果您不需要为KafkaTemplate
使用测微计度量,我们可以禁用它:
kafkaTemplate.setMicrometerEnabled(false);