Что такое Change Data Capture (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?
Разбор темы
- Saga, CDC и event-driven consistency
Почему 2PC не подходит, сага и компенсации, хореография vs оркестрация, CDC и outbox-relay, eventual consistency и границы.
Связанные вопросы
Разбор собеседования с sotto
После собеседования sotto разбирает разговор: оценка, каждый вопрос — хорошо, частично или слабо, чего не хватило в ответе и над чем поработать к следующему разу. Первые 30 минут бесплатно.