Вопрос с собеседования · Брокеры сообщений

Что такое Change Data Capture (CDC) и где оно полезно?

SeniorSaga и CDC
Ещё спрашивают так:
  • Что такое Debezium?
  • Как синхронизировать базу с поиском и аналитикой?
Коротко

CDC (change data capture) читает журнал изменений базы (WAL в PostgreSQL, binlog в MySQL) и публикует каждое изменение строки как событие — обычно в Kafka через Debezium.

  • Приложение не меняется и не делает двойную запись
  • Порядок изменений и ничего не теряется — журнал источник истины
  • Применения: поиск, кэш, аналитика, хранилище данных, outbox, миграции

А ещё События CDC — изменения таблиц, а не бизнес-события; для интеграции между командами лучше outbox

Подробно

Как работает. База и так пишет все изменения в журнал для восстановления и репликации. CDC-коннектор подключается как реплика (логическая репликация PostgreSQL, binlog MySQL), читает поток изменений INSERT/UPDATE/DELETE и публикует их событиями с состоянием строки до и после. Debezium — самый распространённый инструмент, работает в Kafka Connect.

Плюсы:

  • нет двойной записи «в базу и в брокер» и связанных с ней расхождений;
  • изменения не теряются и идут в порядке коммитов;
  • не нужно менять код приложения;
  • начальный снимок плюс поток — можно наполнить новое хранилище.

Применения: обновлять Elasticsearch и кэши, поток в ClickHouse или хранилище данных, публикация событий через outbox (Debezium читает таблицу outbox и превращает строки в события), миграции между базами без простоя.

Ограничения: события отражают схему таблиц — потребители связываются со внутренней структурой чужой базы; изменение схемы ломает потребителей. Поэтому для интеграции между сервисами публикуют осмысленные события через outbox, а «сырой» CDC — для внутренних нужд. Нужно следить за слотом репликации: остановленный коннектор держит WAL и может заполнить диск.

Что хотят услышать

  • Механика: чтение журнала базы.
  • Плюсы против двойной записи.
  • Сценарии применения и outbox.
  • Ограничения: связь со схемой, слот репликации.

Частые ошибки

  • Отдавать сырой CDC другим командам как публичный контракт.
  • Забыть про рост WAL при остановленном коннекторе.

Проверьте себя

Один верный вариант. Подумайте, потом откройте ответ.

Показать варианты и ответ
  • ✓Чтение журнала изменений базы (WAL, binlog) и публикация каждого изменения строки как события
  • ✗Приложение после каждой записи в базу само отправляет событие в Kafka в той же функции
  • ✗Периодический опрос таблиц запросом по полю updated_at
  • ✗Механизм резервного копирования, который сравнивает снимки базы раз в сутки и выгружает разницу

Что спросят дальше

  • Как CDC связан с transactional outbox?
  • Что такое Debezium?

Разбор темы

Связанные вопросы

Партнёр платформы

Разбор собеседования с sotto

После собеседования sotto разбирает разговор: оценка, каждый вопрос — хорошо, частично или слабо, чего не хватило в ответе и над чем поработать к следующему разу. Первые 30 минут бесплатно.

Разбор собеседования