Почему производитель asyn c не ждет заполнения linger.ms или batch.size, когда я устанавливаю для них настраиваемое значение с autoFlu sh, равным false? - PullRequest
0 голосов
/ 09 июля 2020

Я использую spring-kafka 2.2.8 и пишу простой производитель asyn c со следующими настройками:

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

Теперь я создаю KafkaTemplate с autoFlu sh как false с помощью вызов конструктора ниже

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

Теперь у меня есть простой тест, создающий 10 сообщений в промежутке 10 se c с использованием вышеуказанного производителя asyn c, а затем остановил моего производителя с помощью 'Cntrl + C '. Затем, к удивлению, я получил все 10 сообщений, опубликованных на topi c, и я уверен, что размер этих 10 сообщений в совокупности намного меньше, чем размер моего пакета. Размер: 33554431

Теперь у меня два вопроса

  1. Как сообщения публикуются вместо ожидания либо linger.ms, либо batch.size перед созданием сообщения?
  2. В этом сценарии каково значение autoFlush = false ?

1 Ответ

1 голос
/ 09 июля 2020

Если это приложение Spring Boot, Ctrl- C закроет контекст приложения, а DefaultKafkaProducerFactory закроет производителя в его destroy() методе (вызываемом контекстом приложения во время close()).

Вы потеряете записи, только kill -9 приложение.

...