Kafka Connect & CDC
O Block 3 tratou Kafka Connect e Debezium como runtime operacional: slots, WAL, tasks, DLQ e recuperação. A decisão de domínio, contudo, fica acima do CDC bruto.
Decisão de uso
flowchart TD
A[PostgreSQL] --> B[Raw CDC]
B --> C[audit / analytics]
B --> D[Curated Streams]
D --> E[normalized legacy events]
- Raw CDC → auditoria e analytics. Preserva
before,after,op, LSN e metadata técnica. - Curated Streams → normalização controlada de CDC legado. Filtra e transforma quando é necessário um contrato de integração.
- Transactional Outbox + Debezium → eventos de negócio. A intenção é escrita explicitamente na mesma transação que altera o pagamento.
Uma mudança física numa row não equivale automaticamente a intenção de
negócio. O teste com APPROVED → APPROVED gerou op=u raw nos offsets 61 e 63,
mas a Streams classificou ambos como IRRELEVANT_UPDATE e não emitiu um novo
status event.
Provas do Block 3
| Estado | Evidência observada |
|---|---|
| PROVEN — DLQ | dlq-proof chegou a kafkapay.connect.dlq; task RUNNING; headers __connect.errors.* presentes |
| PROVEN — outage | PostgreSQL ficou indisponível por mais de 60 s e o connector recuperou sem restart manual |
| PROVEN — atomicidade | rollback manteve pagamento APPROVED, sem row Outbox e sem marker Kafka |
| PROVEN — Debezium offline | commit persistiu no DB; restore publicou em payment.events partition 3, offset 0 |
| PROVEN — capacidade WAL | max_wal_senders=8, max_replication_slots=8, sete conexões ativas, connectors RUNNING |
| PROVEN — identidade/ordem | event IDs, keys e ordem Kafka foram preservados |
Limites explícitos
QUALIFIED
- EOS RU vs RC: record físico apareceu em
read_uncommittede não emread_committed; uma transação abortada completa não foi provada. - A comparação de intenção depende de
before/after. SemREPLICA IDENTITY FULL, foi observadobefore=null. - Replay com novo
application.idpreserva o event ID determinístico na construção validada, mas o replay end-to-end não foi executado. - Evolução semântica de
payment_methodficou fora do escopo deste bloco.
NOT PROVEN
- Duplicação ALO determinística end-to-end.
- Deduplicação após replay no mesmo application group.
- Falha composta Debezium + Streams.
- Decoupling empírico com
internal_note. - Métricas numéricas de latência e payload.
Os logs, comandos e limitações completos estão em
labs/kafka-connect-cdc/BLOCK3_REPORT.md e
labs/kafka-connect-cdc/EXPERIMENT_REPORT.md.