Day 3 — Kafka Connect & CDC
30 DAY ENGINEERING LOG / 03
DAY 3 — CLOSEDBLOCK 3 — CLOSEDBLOCK 4 — NEXT
Delivery boundaries made observable.
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
| Prova | Evidência real |
|---|---|
| DLQ | dlq-proof chegou a kafkapay.connect.dlq; task continuou RUNNING; headers __connect.errors.* presentes |
| Outage | PostgreSQL ficou indisponível por mais de 60 s e o connector recuperou automaticamente |
| Atomicidade | rollback deixou pagamento APPROVED, sem row Outbox e sem marker Kafka |
| Debezium offline | commit persistiu; após restore, evento em payment.events, partition 3, offset 0 |
| Intenção | raw APPROVED → APPROVED, offsets 61/63, foi filtrado como IRRELEVANT_UPDATE |
| Capacidade | max_wal_senders=8, max_replication_slots=8, sete conexões ativas |
What changed our architecture decision
- Rollback confirmou atomicidade entre mudança de negócio e Outbox.
- Debezium offline confirmou que a indisponibilidade momentânea do connector não perde o evento enquanto o WAL necessário é preservado.
- 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 é:
- reproduzir duplicação ALO determinística;
- provar supressão por idempotência após replay;
- testar falha composta Debezium + Streams;
- provar decoupling com
internal_note; - 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.