🎯 Definicja

Change Data Capture (CDC) to wzorzec integracji danych, który przechwytuje każdą zmianę w bazie źródłowej (INSERT, UPDATE, DELETE) i propaguje ją do systemów docelowych w czasie rzeczywistym — bez kopiowania całej tabeli przy każdej synchronizacji.

🔑 Kluczowe punkty

  • Wal-based CDC: czyta dziennik transakcji (WAL w PostgreSQL, binlog w MySQL)
  • Debezium — najpopularniejszy open-source CDC connector (działa z Kafka)
  • Low latency: zmiany propagowane w sekundach, nie godzinach
  • Pełna historia: DELETE widoczny jako event, nie znika ze źródła
  • Bez obciążenia źródła: czyta log, nie wykonuje SELECT * na tabeli
  • Alternatywa dla incremental sync opartego na updated_at

📚 Szczegółowe wyjaśnienie

CDC vs Incremental Sync (porównanie)

CechaCDCIncremental (updated_at)
LatencjaSekundyMinuty/godziny
DELETEPrzechwytujeNie widzi
Obciążenie źródłaMinimalneQuery na każdej synchronizacji
ZłożonośćWyższaNiższa
Wymaga cursoraNieTak

Architektura z Debezium + Kafka

PostgreSQL (WAL)
      │
      ▼
 Debezium Connector
      │  czyta log transakcji
      ▼
 Apache Kafka Topic
  ("db.public.orders")
      │
  ┌───┴───┐
  ▼       ▼
S3/Delta Lake   Real-time App
(Data Lake)     (alerting)

Event CDC — struktura

Każda zmiana to event z metadanymi:

{
  "op": "u",                    // u=update, c=create, d=delete
  "before": {
    "id": 1001,
    "status": "pending"
  },
  "after": {
    "id": 1001,
    "status": "shipped"
  },
  "source": {
    "table": "orders",
    "ts_ms": 1714900000000
  }
}

Konfiguracja PostgreSQL dla CDC

-- Włącz logical replication w postgresql.conf
wal_level = logical
 
-- Utwórz slot replikacji
SELECT pg_create_logical_replication_slot('debezium', 'pgoutput');
 
-- Ustaw REPLICA IDENTITY dla DELETE
ALTER TABLE orders REPLICA IDENTITY FULL;

CDC w Airbyte

Airbyte obsługuje CDC jako tryb synchronizacji — bez konieczności manualnej konfiguracji Debezium. Dostępne dla PostgreSQL, MySQL, SQL Server.

💡 Przykład zastosowania

Realtime Data Warehouse: tabela customers w PostgreSQL produkcyjnym ma 50M rekordów — full refresh trwałby 6 godzin. CDC przez Debezium → Kafka → Delta Lake przechwytuje tylko zmienione rekordy. Każda aktualizacja adresu klienta trafia do hurtowni w ciągu 10 sekund.

📌 Źródła

👽 Brudnopis