Что такое Outbox pattern и как он реализуется?

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

Короткий ответ

Что ответить на собеседовании

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

Подробный разбор

Ответ с пояснениями

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

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

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

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

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

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


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

Практика в реальном времени

Подготовьтесь к следующему собеседованию

Interview Boost учитывает вакансию, резюме и технологии и помогает сформулировать ответ прямо во время интервью.

Начать подготовку