Назад к вопросам
Senior
5
Как был реализован Outbox Pattern? Какой инструмент отправлял из таблицы outbox в Kafka?
Компании, где спрашивали
Lenta Tech
Ответ от нейросети
sobes.tech AI
Outbox Pattern — это способ гарантировать атомарность записи бизнес-данных и сообщений для интеграции с другими системами. В базе создаётся таблица outbox, куда в рамках одной транзакции записываются события, которые нужно отправить в Kafka.
Реализация обычно включает:
- Запись события в таблицу outbox вместе с основной бизнес-операцией в одной транзакции.
- Отдельный процесс или сервис, который периодически читает новые записи из outbox, отправляет их в Kafka и помечает как отправленные.
В Go часто используют специализированные библиотеки или пишут свой сервис с использованием Kafka Producer API. Для чтения и отправки сообщений из таблицы outbox можно использовать:
- Cron-задачу или daemon, который опрашивает таблицу.
- Инструменты CDC (Change Data Capture), например Debezium, которые отслеживают изменения в базе и публикуют их в Kafka.
Пример упрощённого кода отправки из outbox в Kafka на Go:
rows, _ := db.Query("SELECT id, payload FROM outbox WHERE sent = false")
for rows.Next() {
var id int
var payload string
rows.Scan(&id, &payload)
// Отправка в Kafka
producer.Produce(&kafka.Message{TopicPartition: kafka.TopicPartition{Topic: &topic, Partition: kafka.PartitionAny}, Value: []byte(payload)}, nil)
// Обновление статуса
db.Exec("UPDATE outbox SET sent = true WHERE id = $1", id)
}