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);