Весенняя партия кафки в пределах временного окна - PullRequest
0 голосов
/ 06 ноября 2019

Среда Spring Boot для прослушивания тем kafka (@KafkaListener / @StreamListener) Настроил фабрику слушателей для работы в пакетном режиме:

ConcurrentKafkaListenerContainerFactory # setBatchListener

или через application.properties:

spring.kafka.listener.type=batch

Как настроить фреймворк так, чтобы с учетом двух чисел: N и T, он будет пытаться получить N записей для слушателя, но не будет ждать более T секунд, как описано здесь: https://doc.akka.io/docs/akka/2.5/stream/operators/Source-or-Flow/groupedWithin.html
Некоторые свойства I 'мы посмотрели:

  • max-poll-records гарантирует, что вы не получите больше N чисел в пакете
  • fetch-min-size получите хотя бы такой объем данных в запросе на выборку
  • fetch-max-wait но не ждите больше, чем необходимо
  • idleBetweenPolls просто поспите немного между опросами:)

Кажется, что fetch-min-size в сочетании сfetch-max-wait должен сделать это, но они сравнивают байты, а не сообщения / записи.

Очевидно, что это можно реализовать вручную, я смотрю, можно ли настроить Spring для этого для меня.

1 Ответ

2 голосов
/ 06 ноября 2019

Вроде бы fetch-min-size в сочетании с fetch-max-wait должны это делать, но они сравнивают байты, а не сообщения / записи.

Это правильно, к сожалению, Кафка не предоставляет такого механизмакак fetch.min.records.

Я не ожидаю, что Spring нанесет эту функциональность поверх клиентов kafka;было бы лучше запросить новую функцию в самой Kafka.

Spring вообще не манипулирует записями, возвращаемыми из опроса, за исключением того, что теперь вы можете указать subBatchPerPartition, чтобы получать партии, содержащие только один раздел по порядку. чтобы правильно поддерживать зомби-фехтование при использовании только один раз чтения / prcess / write.

...