Если вы создаете новую службу, как вы узнаете, с чего начать чтение раздела kafka?

#apache-kafka #distributed-system

#apache-kafka #распределенная система

Вопрос:

Я новичок в архитектуре микросервисов. Я пытаюсь учиться на онлайн-ресурсах. Так что мой вопрос носит гипотетический характер.

Предположим, у вас есть объект Person, и любые изменения, которые вы вносите в этот объект, публикуются в разделе, и подписчики используют это для обновления своих данных. Предположим, в теме есть сообщения, подобные тому, что этот пользователь получил один лайк, поэтому, если вы подпишетесь на это, вы обновите количество лайков пользователей на единицу.

Теперь развернута новая служба, у которой есть собственная локальная копия person . Теперь эта служба начинает чтение очереди и видит, что в теме пользователя есть данные за последние 7 дней, за которые этот человек получил несколько лайков. Итак, как эта служба определяет, с чего начать чтение этого раздела? Возможно, в копии данных этого сервиса уже есть много таких лайков, учтенных в резервной копии, которую он получил.

Комментарии:

1. Это в основном зависит от вашего приложения, чтобы выяснить и управлять. Если вы поддерживаете «локальную копию person», вам также необходимо отслеживать, насколько актуальна эта копия (с точки зрения очереди Kafka), чтобы вы знали, какие обновления еще необходимо применить.

Ответ №1:

Если вы использовали сжатую тему (person, likes) , то последние сообщения этой темы всегда будут самыми актуальными «лайками» для данного «человека»

Со временем более похожих событий более старые «похожие» подсчеты будут отброшены для того же «человека», согласно описанию уплотнения журнала.

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