весна кафка ищет последнее доступное сообщение в теме - PullRequest
0 голосов
/ 10 января 2019

У меня есть потребитель Kafka, который подписывается на следующие темы MY_TOPIC, MY_UNINTERESTED_TOPIC.

В следующем сценарии меня не интересует вторая тема, но я должен был упомянуть ее, потому что, если я настрою ее, используя что-то вроде auto.offset.reset, это может затронуть все темы.

В теме MY_TOPIC Я публикую различные виды сообщений: MESSAGE_TYPE_A и MESSAGE_TYPE_B. Оба сообщения являются экземплярами BaseKafkaMessage (пользовательский класс) с разными свойствами.

Теперь мне интересно найти только последнее сообщение типа MESSAGE_TYPE_A. Как я могу это сделать?

Реальный сценарий таков: я публикую два типа сообщений на одну и ту же тему. Один из них используется для подготовки локального кэша у каждого потребителя, который интересуется этой темой и этим сообщением. Если потребитель останавливается, когда он перезагружается, он должен повторно инициализировать свой кэш с последней версией MESSAGE_TYPE_A. MESSAGE_TYPE_B следует игнорировать. Я не хочу отправлять уведомление о Кафке поставщику данных, чтобы снова опубликовать данные, потому что всем подписчикам предстоит выполнить много ненужной работы.

Как я могу получить это? Это возможно?

Я нашел https://docs.spring.io/spring-kafka/reference/htmlsingle/#seek, но я не уверен, что это то, что я ищу, или есть ли другой способ сделать это.

1 Ответ

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

Непонятно, в каком формате эти сообщения или почему вам действительно нужно, чтобы они вообще были в одной теме.

Вы можете использовать различные типы Avro , например. Или вам придется try-catch анализировать два разных байтовых массива (объекты JSON?)

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

Но нет механизма для поиска в индексе для получения последнего отправленного сообщения. Либо вы начинаете с самого последнего события и получаете следующее входящее сообщение, либо вы можете начать с самого начала, а затем сканировать до тех пор, пока не получите 0 записей в следующем цикле опроса, который в теории является «самым последним»

что-то вроде auto.offset.reset может затронуть все темы

Это касается только тех тем, по которым его интересует потребитель, а не всех.

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