使用spring kafka 本地调试循环发送1W+消息时,会出现producer超时被强制关闭异常

Think丶 发表于: 2020-08-14   最后更新时间: 2020-08-14  

请教个问题,使用spring kafka 本地调试循环发送1W+消息时,就会会出现producer超时被强制关闭异常,但是部署到服务器循环发送10W+消息都不会出现这种异常,两者使用一样的producer 配置,能帮忙分析下是什么原因吗?

 java.lang.IllegalStateException: Producer is closed forcefully.
    at org.apache.kafka.clients.producer.internals.RecordAccumulator.abortBatches(RecordAccumulator.java:696) [kafka-clients-1.0.1.jar:na]
    at org.apache.kafka.clients.producer.internals.RecordAccumulator.abortIncompleteBatches(RecordAccumulator.java:683) [kafka-clients-1.0.1.jar:na]
    at org.apache.kafka.clients.producer.internals.Sender.run(Sender.java:185) [kafka-clients-1.0.1.jar:na]
    at java.lang.Thread.run(Thread.java:748) [na:1.8.0_144]


您需要解锁本帖隐藏内容请: 点击这里
本帖隐藏的内容




上一条: kafka集群网络请求空闲率长期低于1%,所有broker日志报错:Attempting to send response via channel for which there is no open connection, connection id
下一条: kafka主题中的分区和分区副本的作用是什么?

  • 程序不是优雅停机导致的吧。

    • 还真是停机导致的,我加多个@kafkalistener,spring容器不会关闭,就不会出现producer被强制关闭这个问题了;
      但是,我实现CommandLineRunner接口,在run方法内部循环发送,理论上也要执行完发送消息逻辑才会停机吧?,除非CommandLineRunner有时间限制?能帮忙解答下吗??
      代码如下:

      @SpringBootApplication
      @EnableKafka
      public class KafkaExampleApplication implements CommandLineRunner {
          public static void main(String[] args) {
              SpringApplication.run(KafkaExampleApplication.class, args);
          }
          @Autowired
          private KafkaProducerExample kafkaProducerExample;
          @Autowired
          private KafkaProducerUtil kafkaProducerUtil;
          @Override
          public void run(String... args) {
              for (int i=0; i<50000; i++) { kafkaProducerExample.sendMsg(); } } }