Documentation / Kafka Connect

16

Kafka Connect & CDC

O que o Block 3 comprovou sobre Debezium, Outbox e mudança física de rows.

LAB-VERIFIEDLABKAFKA 4.3.1

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

EstadoEvidência observada
PROVEN — DLQdlq-proof chegou a kafkapay.connect.dlq; task RUNNING; headers __connect.errors.* presentes
PROVEN — outagePostgreSQL ficou indisponível por mais de 60 s e o connector recuperou sem restart manual
PROVEN — atomicidaderollback manteve pagamento APPROVED, sem row Outbox e sem marker Kafka
PROVEN — Debezium offlinecommit persistiu no DB; restore publicou em payment.events partition 3, offset 0
PROVEN — capacidade WALmax_wal_senders=8, max_replication_slots=8, sete conexões ativas, connectors RUNNING
PROVEN — identidade/ordemevent IDs, keys e ordem Kafka foram preservados

Limites explícitos

QUALIFIED

  • EOS RU vs RC: record físico apareceu em read_uncommitted e não em read_committed; uma transação abortada completa não foi provada.
  • A comparação de intenção depende de before/after. Sem REPLICA IDENTITY FULL, foi observado before=null.
  • Replay com novo application.id preserva 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_method ficou 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.