Documentation / Daily

22

Day 3 — Kafka Connect & CDC

Block 3 fechado com provas de Outbox, Debezium, DLQ e limites do raw CDC.

LAB-VERIFIEDDAY 03KAFKA 4.3.1

Day 3 — Kafka Connect & CDC

30 DAY ENGINEERING LOG / 03

DAY 3 — CLOSEDBLOCK 3 — CLOSEDBLOCK 4 — NEXT

Delivery boundaries made observable.

PostgreSQLOutboxDebeziumKafka

What we studied

Kafka Connect distribuído, Debezium PostgreSQL, WAL e replication slots, DLQ de transformação, Transactional Outbox e a diferença entre mudança física de row e intenção de negócio.

What we proved

ProvaEvidência real
DLQdlq-proof chegou a kafkapay.connect.dlq; task continuou RUNNING; headers __connect.errors.* presentes
OutagePostgreSQL ficou indisponível por mais de 60 s e o connector recuperou automaticamente
Atomicidaderollback deixou pagamento APPROVED, sem row Outbox e sem marker Kafka
Debezium offlinecommit persistiu; após restore, evento em payment.events, partition 3, offset 0
Intençãoraw APPROVED → APPROVED, offsets 61/63, foi filtrado como IRRELEVANT_UPDATE
Capacidademax_wal_senders=8, max_replication_slots=8, sete conexões ativas

What changed our architecture decision

  1. Rollback confirmou atomicidade entre mudança de negócio e Outbox.
  2. Debezium offline confirmou que a indisponibilidade momentânea do connector não perde o evento enquanto o WAL necessário é preservado.
  3. Raw CDC confirmou que uma mudança física não representa necessariamente um evento semântico.
flowchart TD
  A[Application] --> B[PostgreSQL transaction]
  B --> C[payments]
  B --> D[outbox_events]
  D --> E[Debezium]
  E --> F[payment.events]
  F --> G[Consumers]

Por isso, a decisão é:

Transactional Outbox + Debezium → eventos de negócio
Raw CDC                         → auditoria / analytics
Curated Streams                 → normalização de CDC legado

Limits that remain

QUALIFIED: EOS RU vs RC não provou uma transação abortada completa; a comparação raw depende de before/after; replay com novo application.id tem ID determinístico validado, mas não replay end-to-end; payment_method ficou fora do escopo semântico deste bloco.

NOT PROVEN: duplicação ALO determinística, deduplicação após replay, falha composta Debezium + Streams, decoupling com internal_note e métricas numéricas de latência/payload.

Block 4 — Delivery Semantics, Replay & Compound Failures

O Block 4 é NEXT, não iniciado. A ordem prevista é:

  1. reproduzir duplicação ALO determinística;
  2. provar supressão por idempotência após replay;
  3. testar falha composta Debezium + Streams;
  4. provar decoupling com internal_note;
  5. medir latência, payload e recovery time.

Critério de saída: cada item deve ser PROVEN com evidência numérica ou de offsets. Nenhum está concluído nesta página.

Fontes: labs/kafka-connect-cdc/BLOCK3_REPORT.md, EXPERIMENT_REPORT.md, ARCHITECTURE_DECISION.md e OUTBOX_RETENTION.md.