@nakem

Как гарантировать отправку в кафку некоего события?

Есть сервис, который выполняет некоторую полезную работу и после отправляет некоторую статистику в кафку для другого сервиса. Это статистика очень важна и нужно гарантировать ее отправку, даже если сервис упадет.
Есть идея перед началом выполнения полезной работы фиксировать это в бд. А уже после отправки в кафку статистики отмечать запись в бд как `was_sent: true`.
То есть, если во время выполнения полезной работы сервис упадет, то джоба будет собирать с бд записи с `was_sent: false` и отправлять статистику в кафку.
Использование nosql типа редиса не представляется возможным.
Вот думаю как решать проблему.
  • Вопрос задан
  • 56 просмотров
Пригласить эксперта
Ответы на вопрос 2
mayton2019
@mayton2019
Bigdata Engineer
Нет никакого смысла страховать Кафку. Она совершенно самодостаточна. Есть настройка message delivery semantics. Почитай про нее. Вобщем идея такава что - каждый сам себе в зависимости от бизнес требований выставляет такие параноидальные настройки producer/consumer, чтобы было и быстро и надёжно одновременно.
Ответ написан
Комментировать
Jeer
@Jeer
уверенный пользователь
Вам нужен паттерн Outbox, посмотрите
Смысл в том, что при записи какой-то сущности в базе мы открываем транзакцию и пишем в две таблицы, в основную и в outbox. Транзакция гарантирует сохранение события. Затем паблишим в кафку из аутбокса какой-то джобой
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы