Kafka Streams: координация обработки приложений - PullRequest
0 голосов
/ 08 октября 2018

Сценарий:

У меня есть приложение KafkaStreams с полным хранением.У него есть одна тема событий и несколько выходных тем, которые включают в себя веб-события, пользователей, клиентов и т. Д. По ней работает топология, генерирующая сеансы и отношения между сущностями.

У меня есть несколько (в тысячах) веб-сайтов,каждый из которых отправляет события в одну и ту же тему.Расход из выходной темы отправляется в аналитическую БД.

У меня есть исходные данные о событиях, разделенные на modulo (website, user) / numPartitions, чтобы обеспечить хорошее распределение данных.

Проблема:

При изменении определенных метаданных для веб-сайта я хотел бы иметь возможность обработать все данные для этого веб-сайта (и только для этого веб-сайта).

Я мог бы запустить отдельное приложение для повторной обработки всех данных со смещения 0, игнорируя данные с других веб-сайтов, и останавливать их после завершения.Это хорошо, потому что я могу масштабировать приложение для обработки в зависимости от размера сайта, не влияя на обычное приложение.

Однако есть некоторые проблемы:

  • Как обычное приложение может узнать о новом состоянии, созданном после повторной обработки?

  • Как можно синхронизировать два приложения без остановки обычного приложения (т. Е. Как безопасно остановить повторную обработку)?

...