当我将 autoFlush 设置为 false 的自定义值时,为什么异步生产者不等待 linger.ms 或 batch.size 已满?

Why async producer is not waiting for either linger.ms or batch.size to be full when i set them a custom value with autoFlush is set to false?

我正在使用 spring-kafka 2.2.8 并使用以下设置编写一个简单的异步生产者:

linger.ms : 300000, 
batch.size: 33554431, 
max.block.ms: 60000.

现在我通过调用下面的构造函数创建一个 autoFlush 为 false 的 KafkaTemplate

public KafkaTemplate(ProducerFactory<K, V> producerFactory, boolean autoFlush) 

现在我有一个简单的测试,使用上面的异步生成器在 10 秒内生成 10 条消息,然后使用 'Cntrl+C' 停止了我的生成器。然后令人惊讶的是,我得到了关于该主题的所有 10 条消息,我确信这 10 条消息加起来的大小远远小于我的 batch.size:33554431

现在我有两个问题

  1. 如何发布消息而不是在生成消息之前等待 linger.ms 或 batch.size?
  2. 在这种情况下,autoFlush=false 的意义是什么?

如果这是一个 Spring 引导应用程序,Ctrl-C 将关闭应用程序上下文,DefaultKafkaProducerFactory 将在其 destroy() 方法中关闭生产者(由应用程序上下文调用close()).

只有 kill -9 应用程序才会丢失记录。