в топик AB -> сервис B
* Y -> в топик АС -> сервис С
Бизнес-логика такова, что событие Y может быть корректно обработано только после того, как серсис B отработает X (сервис B изменит некое состояние, которое требуется для обработки Y).
Вопрос:
Есть ли в кафке какой-то красивый способ отложить обработку Y на какой-нить маленький таймаут, если сервис С "видит", что X ещё не обработан? При этом не останавливать обработку других сообщений.
Быстрое гугление говорит, что вроде как нет. Предлагается эту проблему решать уже вне кафки, в базу там писать и т.п. Или переходить на rabbitmq. Но я решил всё-таки спросить тут, может кто-то такое решал?
Делать ещё одну очередь
Вам нужна Saga
В кафке такого нет. Этот функционал надо искать в стриминговых фреймворках, типа flink/spark. Гуглить session window aggregation
Сервис B генерит ивент что сообщение X обаботано, сервис С получает ивент и обрабатывает сообщение Y. Задержку можно сделать через Join Window или Store
Обсуждают сегодня