Вопрос об использовании @KafkaListener autoStartup = "false" для нескольких тем - PullRequest
0 голосов
/ 16 января 2019

со следующим

@KafkaListener(id = "id1", autoStartup = "false", topics = { "topic1", "topic2" } spring.kafka.consumer.auto-offset-reset=earliest

Предположим, есть несколько сообщений в каждой теме до запуска .start

Когда

KafkaListenerEndpointRegistry.getListenerContainer("id1").start();

вызывается, есть ли гарантия того, что все сообщения из theme1 будут обработаны до topic2 (это то, что я вижу), и что произойдет, если сообщения будут отправлены в topic1, пока topic2 обрабатывается.

+++++++++++++++++++++++++++++++++++++++++++++++ ++

Редактировать

Выполнен следующий тест, каждая тема имеет один раздел. До запуска теста было 10 сообщений в теме1 и 10 сообщений в теме2. Запустил код и позволил 10 сообщениям topic1 обрабатываться, но в то время как сообщения topic2, где обрабатывались, я отправлял больше сообщений в topic1, но там, где слушатель не обрабатывал их, пока не были обработаны все существующие ранее сообщения из topic2.

Таким образом, кажется, что сообщения обрабатываются по порядку из массива свойств themes, и любые новые сообщения не обрабатываются, пока не будут обработаны существующие.

Порядок обработки сообщений в тема1 сообщение 1 тема1 сообщение 2 ... тема1 сообщение 10 тема2 сообщение 1 тема 2 сообщение 2 ... ... отправил сообщение 11 в тему 1 в это время ... тема2 сообщение 10 тема1 сообщение 11

1 Ответ

0 голосов
/ 16 января 2019

Такой гарантии нет.

См. ответы на этот вопрос .

Кафка дает вам только гарантию упорядочения сообщений внутри раздела....

Что касается вашего варианта использования с двумя темами, то нет никакой связи между порядком подписки на темы и порядком сообщений, даже если ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...