Skip to content
Back to skills

Implementing Cdc With Debezium

ASecurity

Capture database changes with Debezium change data capture — connector setup for Postgres/MySQL/SQL Server, snapshot vs streaming phases, handling inserts/updates/deletes and tombstones, schema changes, and applying the change stream idempotently to a warehouse/lake. Use when setting up CDC, replicating an OLTP database, capturing deletes, or consuming a Debezium change stream.

  • 15 stars
  • 0 votes
  • 0 copies
  • 1 view
  • Added September 1, 2026
ai-agentssqldatabase

Security analysis

A100/100

Scanned September 1, 2026

npx -y skills add Unknown-333/awesome-data-engineering-skills --skill implementing-cdc-with-debezium --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Implementing Cdc With Debezium?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Implementing Cdc With Debezium
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/unknown-333-implementing-cdc-with-debezium/badge)](https://www.skillsdirectory.com/skills/unknown-333-implementing-cdc-with-debezium)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: implementing-cdc-with-debezium
description: Capture database changes with Debezium change data capture — connector setup for Postgres/MySQL/SQL Server, snapshot vs streaming phases, handling inserts/updates/deletes and tombstones, schema changes, and applying the change stream idempotently to a warehouse/lake. Use when setting up CDC, replicating an OLTP database, capturing deletes, or consuming a Debezium change stream.
---

# Implementing CDC with Debezium

## When to use

- Replicating an operational database (Postgres/MySQL/SQL Server) to a
  warehouse/lake in near real time.
- You need **deletes** and every intermediate change (watermark extraction can't
  see deletes).
- Consuming or applying a Debezium change stream idempotently.
- Do NOT use for simple periodic batch pulls (use `building-ingestion-pipelines`).

## Workflow

```
- [ ] Enable the DB log (Postgres logical replication / MySQL binlog / MSSQL CDC)
- [ ] Configure the Debezium connector (tables, snapshot mode, keys)
- [ ] Handle the initial snapshot, then streaming changes
- [ ] Apply changes idempotently: MERGE keyed on PK, ordered by log position
- [ ] Handle deletes (tombstones) and schema changes
```

1. **Enable the log.** Debezium reads the DB transaction log: Postgres logical
   replication (`wal_level=logical` + a publication/slot), MySQL binlog
   (`ROW` format), or SQL Server CDC. Grant the connector the needed privileges.
2. **Configure the connector** with the tables to capture, the snapshot mode, and
   the primary key. It emits an initial **snapshot**, then live **change events**.
3. **Apply idempotently.** Each event carries `before`/`after`/`op` and a log
   position (LSN/GTID). MERGE on the primary key and order by the position so
   out-of-order or replayed events converge to the correct state.
4. **Deletes** arrive as `op=d` (plus a null-value tombstone for log compaction);
   apply as a delete or soft-delete flag.
5. **Schema changes** flow through; pair with `handling-schema-evolution`.

## Patterns

**Apply a change event with MERGE (soft delete):**

```sql
MERGE INTO dwh.customers t
USING cdc_batch s ON t.id = s.id
WHEN MATCHED AND s.op = 'd' THEN UPDATE SET t.is_deleted = TRUE, t.updated_lsn = s.lsn
WHEN MATCHED AND s.lsn > t.updated_lsn THEN UPDATE SET t.name = s.name, t.updated_lsn = s.lsn
WHEN NOT MATCHED AND s.op <> 'd' THEN INSERT (id, name, is_deleted, updated_lsn)
  VALUES (s.id, s.name, FALSE, s.lsn);
```

The `lsn` guard makes application idempotent and order-safe: replayed or older
events are ignored.

**Snapshot then stream** — the snapshot backfills current state; streaming keeps it
fresh. Deduplicate the overlap by log position.

## Common pitfalls

- **Ignoring log position ordering** — applying events out of order corrupts state;
  guard updates with the LSN/GTID.
- **Not handling deletes/tombstones** — target diverges from source over time.
- **Non-idempotent apply** — connector restarts replay events and duplicate rows;
  MERGE by PK.
- **Replication slot not consumed** (Postgres) — WAL accumulates and fills the
  disk; monitor slot lag and keep the consumer running.
- **Forgetting schema-change handling** — a source DDL breaks the sink; plan for
  additive evolution.
- **Snapshot on a huge table with no throttling** — hammers the source; use
  incremental snapshotting.

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…