Сценарий:
У меня есть приложение KafkaStreams с полным хранением.У него есть одна тема событий и несколько выходных тем, которые включают в себя веб-события, пользователей, клиентов и т. Д. По ней работает топология, генерирующая сеансы и отношения между сущностями.
У меня есть несколько (в тысячах) веб-сайтов,каждый из которых отправляет события в одну и ту же тему.Расход из выходной темы отправляется в аналитическую БД.
У меня есть исходные данные о событиях, разделенные на modulo (website, user) / numPartitions
, чтобы обеспечить хорошее распределение данных.
Проблема:
При изменении определенных метаданных для веб-сайта я хотел бы иметь возможность обработать все данные для этого веб-сайта (и только для этого веб-сайта).
Я мог бы запустить отдельное приложение для повторной обработки всех данных со смещения 0, игнорируя данные с других веб-сайтов, и останавливать их после завершения.Это хорошо, потому что я могу масштабировать приложение для обработки в зависимости от размера сайта, не влияя на обычное приложение.
Однако есть некоторые проблемы:
Как обычное приложение может узнать о новом состоянии, созданном после повторной обработки?
Как можно синхронизировать два приложения без остановки обычного приложения (т. Е. Как безопасно остановить повторную обработку)?