Какие проблемы встречались при работе с CDC-данными
Что проверяют
Работали ли вы с CDC руками или знаете термин по статьям. Интервьюер ждёт одну-две реальные истории: что сломалось, как заметили, как чинили. Следом спрашивают, как вы убеждаетесь, что данные в хранилище совпадают с источником.
Как отвечать
Каркас истории: источник и инструмент, что пошло не так, как обнаружили, что поменяли. Примеры и цифры нужны ваши собственные, но опираться удобно на типовые проблемы:
- разрастание WAL: Debezium на PostgreSQL читает через логический слот репликации. Коннектор упал на выходные, слот держит WAL, диск источника заполняется. Помогают мониторинг отставания слота и
max_slot_wal_keep_size; - дубли и порядок: Kafka Connect доставляет «хотя бы раз», после рестарта события повторяются. Порядок гарантирован только внутри партиции, поэтому ключ сообщения это первичный ключ строки, а применение идемпотентно:
MERGEпо ключу илиReplacingMergeTreeв ClickHouse с версией из LSN; - удаления: приходит событие удаления и следом tombstone. Если приёмник их игнорирует, в хранилище копятся «мёртвые» строки;
- изменения схемы: новая колонка или смена типа ломают десериализацию. Спасают Schema Registry с правилами совместимости и договорённость с командой источника;
- начальный снимок: первичная загрузка большой таблицы идёт часами и нагружает прод. Инкрементальный снапшот Debezium грузит её частями, не останавливая поток;
- сверка: регулярное сравнение числа строк и контрольных сумм, иначе тихая потеря данных всплывает через месяц в отчёте.
Если с CDC вы не работали, так и скажите и расскажите о ближайшем опыте: инкрементальные выгрузки по updated_at и почему они теряют удаления и промежуточные состояния.
Где спотыкаются
Рассказывают по шаблону «были проблемы с производительностью, оптимизировали». Без инструмента, объёма и конкретного сбоя история звучит выдуманной.
Считают, что CDC даёт exactly-once из коробки. Дубли будут, вопрос в том, выдерживает ли их приёмник.
Забывают про мониторинг: лаг коннектора, размер слота, поток событий в минуту. История «узнали от аналитиков, что отчёт пустой» честная, но добавьте, какую метрику вы после этого завели.