Learning Platform
Глоссарий Troubleshooting
Урок 09.01 · 24 мин
Средний
CDCDebeziumChange Data CaptureLog-based CDCSchema EvolutionExactly-once

CDC Pipeline Design

Что такое CDC и зачем

Change Data Capture — захват изменений из source database в реальном времени. Вместо periodic full scan — stream отдельных INSERT/UPDATE/DELETE.

Без CDC (Batch):
  Every hour: SELECT * FROM orders WHERE updated_at > last_run
  Проблемы:
    - Пропуск DELETE (нет updated_at)
    - Нагрузка на source DB (full scan)
    - Задержка = 1 час

С CDC (Streaming):
  Real-time: каждый INSERT/UPDATE/DELETE → event в Kafka
  Плюсы:
    - Captures DELETEs
    - Минимальная нагрузка (читает WAL, не таблицы)
    - Задержка = секунды

Log-based vs Query-based CDC

ПодходМеханизмНагрузка на sourceCaptures DELETEsLatency
Log-basedЧитает WAL/binlogМинимальнаяДаСекунды
Query-basedPolling по timestampВысокаяНетМинуты
Trigger-basedDB triggersОчень высокаяДаМгновенно
TIP

Всегда предпочитайте log-based CDC. Query-based — fallback для баз без WAL доступа (legacy systems, SaaS APIs).

CDC fundamentals — теория и практика Logical decoding в PostgreSQL — внутренности

Debezium Architecture

CDC Pipeline: Source → Debezium → Kafka → Lakehouse
PostgreSQL (WAL)
MySQL (Binlog)
Debezium (Kafka Connect)
Kafka Topics
Bronze
Silver
Gold

Debezium Event Structure

{
  "before": { "id": 1, "name": "Иван", "city": "Москва" },
  "after":  { "id": 1, "name": "Иван", "city": "Казань" },
  "op": "u",          // c=create, u=update, d=delete, r=read(snapshot)
  "ts_ms": 1700000000,
  "source": {
    "connector": "postgresql",
    "db": "orders_db",
    "schema": "public",
    "table": "customers",
    "lsn": 12345678
  }
}

Exactly-Once CDC

Problem: Debezium restart → may re-send events

Solution layers:
  1. Debezium: tracks LSN/binlog offset in Kafka Connect offsets
  2. Kafka: idempotent producer (dedup by sequence number)
  3. Consumer: idempotent writes
     - MERGE INTO target USING source ON id = id
     - Delta Lake: MERGE with deduplication
     - Iceberg: UPSERT by primary key

End-to-end exactly-once:
  Kafka transactions + idempotent consumer + dedup on write

Schema Evolution в CDC

Source DB: ALTER TABLE customers ADD COLUMN phone VARCHAR(20)

Impact on CDC pipeline:
  1. Debezium detects schema change via WAL
  2. New events include 'phone' field
  3. Schema Registry registers new version (v2)
  4. Consumers must handle both v1 and v2

Strategies:
  a) Forward compatibility: new fields = NULL for old consumers
  b) Schema Registry: enforce BACKWARD/FORWARD compatibility
  c) Bronze layer: store raw (tolerant), validate in Silver
Schema evolution в CDC pipelines — практика Source connectors в Kafka Connect
WARNING

Опасно: breaking schema changes без координации. DROP COLUMN или RENAME COLUMN ломает downstream. Всегда: add new → migrate → drop old. Schema Registry enforcement = обязательно в production.

NOTE

Cross-reference: Debezium CDC Mastery. Этот урок покрывает CDC с позиции System Design. Для глубокого погружения в Debezium (connectors, transforms, SMTs, monitoring, failover) — курс Debezium CDC Mastery на этой платформе.

Проверка знанийKnowledge check
ОтветAnswer

Проверьте понимание

Результат: 0 из 0
Прикладной
Вопрос 1 из 2. Legacy система без WAL доступа. Нужно реплицировать изменения в data lake. Таблицы имеют updated_at колонку. Какой подход CDC?

Закончили урок?

Отметьте его как пройденный, чтобы отслеживать свой прогресс

Войдите чтобы оценить урок

Прогресс модуля
0 из 1