TGViewer
Дата Инженер Лаб | Артём Подвальный Дата Инженер Лаб | Артём Подвальный @dataengineerlab · 1.87K subscribers
Post #136 724
CDC и Debezium: как передавать изменения, а не выгружать всю таблицу заново?

Допустим, заказы интернет-магазина 🟧 хранятся в MySQL, а отчёты строятся в ClickHouse🏠. Данные между ними нужно регулярно обновлять.

Можно каждый раз копировать всю таблицу. Но с ростом данных это занимает больше времени и нагружает источник.

Здесь пригодится Debezium — инструмент, который отслеживает изменения в базе и передаёт их дальше. Такой подход называется CDC — Change Data Capture

Как он понимает, что изменилось? 🤔

В MySQL есть binlog — журнал🗂, в котором фиксируются изменения. При соответствующей настройке Debezium читает его и формирует события:

📍появился заказ — добавлена запись;
📍статус поменялся с создан на оплачен — запись обновлена;
📍заказ удалили из таблицы — запись удалена.

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

🔄А как данные попадут в ClickHouse?

Один из вариантов: Debezium отправляет события в Kafka, а отдельный обработчик или готовый коннектор читает их и записывает результат в ClickHouse.

Здесь у каждого своя задача: Debezium замечает изменения, Kafka хранит и передаёт события, а загрузчик применяет их в хранилище. Пример архитектуры.

Кстати, почему бы просто не выбирать строки по updated_at?

Так тоже можно. Но поле должно корректно обновляться при каждом изменении. А если строку физически удалили, запрос по updated_at её уже не найдёт. В журнале остаётся событие удаления, Debezium может его передать.

Но подключить Debezium недостаточно, чтобы данные сами стали правильными ☑️

Нужно продумать, как загрузчик обработает обновления и удаления, что произойдёт при повторном получении события и как заметить задержку.

Для небольшого справочника с обновлением раз в сутки обычная выгрузка может быть проще. А если большая таблица постоянно меняется и эти изменения нужны в аналитике с небольшой задержкой, стоит разобраться с Debezium 👊

А вас спрашивали на собесах про CDC?🧑‍💼
  • ✍ 7
  • 🔥 7
  • 👀 1
More from @dataengineerlab
  1. Sep 20, 2026Как вкатиться в Data Engineering с нуля? 🗺 Самая частая ошибка новичков- пытаться сразу в…
  2. Sep 13, 2026Тебе тоже кажется, что забываешь быстрее, чем учишь? Недавно менти поделился проблемой: по…
  3. Sep 10, 2026Мини гайд по ИИ-агентам Агент снова забыл условия задачи, полез менять лишнее или написал…
  4. Sep 3, 2026До конца года 4 месяца. Что можно успеть? 📖 Лето закончили с сильными результатами: 13 ме…
  5. Aug 30, 2026Что такое векторные базы данных? Представим, что пользователь пишет📝: «Не проходит оплата…
  6. Aug 23, 2026Как рассказывать о своём опыте на собеседовании 🎙 Просто перечислить Kafka, Spark и Click…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →