Sobes.tech
Назад к вопросам
Middle+
5

Kafka недоступна, сервис не может отправить обновление заказа. Как решить проблему? Что такое Outbox pattern?

Компании, где спрашивали
X5 groupX5 group

Ответ от нейросети

sobes.tech AI

Если Kafka недоступна и сервис не может отправить обновление заказа, нужно обеспечить надежность доставки сообщений и избежать потери данных. Один из способов — использовать Outbox pattern.

Outbox pattern — это шаблон, при котором изменения состояния (например, обновления заказа) сначала записываются в локальную таблицу "outbox" в той же транзакции, что и основное изменение данных. Затем отдельный процесс или сервис читает эти записи из таблицы и отправляет их в Kafka. Если Kafka недоступна, сообщения остаются в таблице и будут отправлены позже, когда сервис восстановит соединение.

Таким образом, достигается надежная доставка сообщений и согласованность данных.

Пример упрощенной схемы:

  1. В транзакции обновляем заказ и записываем событие в таблицу outbox.
  2. Отдельный воркер периодически читает новые записи из outbox и отправляет их в Kafka.
  3. После успешной отправки событие помечается как отправленное или удаляется из outbox.

Это позволяет избежать потери сообщений при сбоях Kafka и гарантировать, что все обновления будут доставлены.


В Go можно реализовать запись в outbox в рамках транзакции с базой данных, а затем отдельной горутиной отправлять события в Kafka.