Я использую spring-kafka 2.2.8 и пишу простой производитель asyn c со следующими настройками:
producer config key : compression.type and value is : none
producer config key : request.timeout.ms and value is : 10000
producer config key : acks and value is : all
producer config key : batch.size and value is : 33554431
producer config key : delivery.timeout.ms and value is : 1210500
producer config key : retry.backoff.ms and value is : 3000
producer config key : key.serializer and value is : class org.apache.kafka.common.serialization.StringSerializer
producer config key : security.protocol and value is : SSL
producer config key : retries and value is : 3
producer config key : value.serializer and value is : class io.confluent.kafka.serializers.KafkaAvroSerializer
producer config key : max.in.flight.requests.per.connection and value is : 1
producer config key : linger.ms and value is : 1200000
producer config key : client.id and value is : <<my app name>>
Я распечатал указанные выше настройки производителя, используя фрагмент кода ниже:
DefaultKafkaProducerFactory defaultKafkaProducerFactory = (DefaultKafkaProducerFactory) mykafkaProducerFactory;
Set<Entry> set = defaultKafkaProducerFactory.getConfigurationProperties().entrySet();
set.forEach( item ->
System.out.println("producer config key : "+item.getKey()+" and value is : "+item.getValue())
);
Теперь я создаю KafkaTemplate с autoFlu sh как false, вызывая приведенный ниже конструктор
public KafkaTemplate(mykafkaProducerFactory, boolean autoFlush)
Теперь у меня есть производитель asyn c, создающий 10 сообщений в пролет 10 сек c. Затем, к удивлению, я получил все 10 сообщений, опубликованных на topi c за несколько секунд, и я уверен, что размер этих 10 сообщений в совокупности намного меньше, чем размер моего пакета. Размер: 33554431
Теперь мой вопрос составляет
- Почему сообщения публикуются вместо ожидания либо linger.ms, либо batch.size перед созданием сообщения?