Integração e API

Change Data Capture (CDC)

Para evitar varrer milhões de linhas a cada sincronização, Change Data Capture captura somente inserções, atualizações e exclusões desde uma posição conhecida. SQL Server registra mudanças em tabelas associadas a LSNs; PostgreSQL expõe logical decoding do WAL; MySQL usa binlog. O consumidor pode publicar em Kafka via Debezium. Uma janela de 24 h de retenção, por exemplo, exige que o leitor acompanhe. A limitação é operacional: schema, ordem, snapshots e deletes precisam de tratamento explícito.


🔀 Tipos de Comunicação
LOG-BASED
CDC baseada em log transacional
A técnica lê o log que o banco já usa para recuperação e replicação. PostgreSQL oferece logical decoding sobre WAL; MySQL registra mudanças em binary log; SQL Server CDC usa o transaction log e processos para materializar mudanças. Um conector interpreta insert, update e delete e produz eventos com posição, tabela, chave e valores. A vantagem é baixo impacto comparado a consultar todas as linhas e capacidade de capturar deletes. O leitor precisa manter checkpoint, como LSN, binlog filename/position ou GTID. Se o log é removido antes de o consumidor avançar, ocorre lacuna e pode ser necessário novo snapshot. A retenção do banco precisa superar indisponibilidade planejada. Acesso ao log exige privilégios e configuração. O formato interno pode mudar; usar APIs e plugins suportados.
CHANGE TABLE
CDC por tabelas de mudança
SQL Server CDC cria tabelas de mudança associadas às tabelas capturadas e funções para consultar por intervalo de LSN. Inserts e deletes aparecem como linhas; updates podem registrar valores antes e depois conforme operação. Um job de captura lê o log e popula. Um job de cleanup aplica retenção. O consumidor consulta `fn_cdc_get_all_changes_*` ou funções equivalentes. Isso desacopla o leitor do log bruto, mas adiciona armazenamento e latência. A ativação é por banco e tabela, requer chave ou configuração para algumas capacidades. Alterações de schema precisam de gestão. Se a retenção expira antes da leitura, os LSNs deixam de estar disponíveis. O pipeline monitora início e fim da janela.
TRIGGER
CDC por triggers e tabela de auditoria
Triggers de INSERT, UPDATE e DELETE gravam numa tabela outbox ou de mudanças. É portável a bancos sem acesso a log e permite payload de domínio. A escrita ocorre na mesma transação, oferecendo atomicidade. O custo é aumentar latência e carga de cada operação. Triggers complexas são difíceis de depurar e podem bloquear. Recursão, ordem e bulk operations precisam de teste. A tabela cresce e requer limpeza. Um trigger pode registrar apenas chave e tipo; um worker lê detalhes. Para integração de casa inteligente, uma aplicação pode gravar evento de automação e alteração de estado numa outbox, depois publicar em MQTT. Isso é mais próximo do Transactional Outbox que CDC genérica, mas usa o mesmo princípio de capturar mudança confiavelmente.
POLLING
CDC por consultas incrementais
Quando não há log ou trigger, o integrador consulta `WHERE updated_at > last_seen` em intervalos. É simples, mas possui limitações. Precisa de timestamp confiável, índice e desempate por ID. Atualizações com o mesmo timestamp e transações tardias podem ser perdidas. Deletes não aparecem sem tombstone ou coluna `deleted_at`. Relógio do servidor deve ser usado, não do cliente. Uma janela sobreposta, como reler os últimos 5 min e deduplicar, reduz lacunas. O cursor usa `(updated_at,id)`. Esse método é útil para APIs SaaS que expõem `modified_since`, mas não é equivalente a log CDC em consistência. A frequência de polling define latência e custo. Rate limits precisam ser respeitados.
✅ Vantagens Arquiteturais
Reduz volume de leitura em sincronizações contínuas
Uma tabela com 10 milhões de registros pode receber 5 mil mudanças por hora. Ler apenas 5 mil é muito mais eficiente que varrer 10 milhões. O ganho aparece em I/O, CPU, rede e custo. O consumidor também processa menos. A primeira carga ainda precisa de snapshot. O pipeline deve coordenar snapshot e log para não perder eventos entre o início e o fim. Debezium usa mecanismos de snapshot e continua do log. A estratégia varia por banco. Uma leitura incremental não é automaticamente consistente se o cursor começa depois do snapshot sem posição comum. O desenho precisa de high-water mark ou protocolo do conector.
Desacopla sistemas operacionais de consultas no banco principal
Em vez de cada serviço consultar tabelas, CDC publica mudanças num broker. Busca, cache, analytics, notificações e automações consomem. O banco reduz consultas repetitivas. O evento precisa ter schema e contrato. Expor todas as colunas internas acopla. Um modelo raw pode alimentar uma camada de transformação; eventos de domínio podem ser preferíveis para consumidores. CDC informa que a linha mudou, não por que. Uma atualização de `status=ON` pode vir de usuário, rotina ou correção. Se a causa importa, a aplicação precisa gravar metadado. CDC técnico e eventos de domínio são complementares.
Captura exclusões e estados intermediários que polling simples perde
O log registra delete e sequência de updates. Um polling do estado atual pode nunca ver que uma luz ficou ligada por 2 s entre duas consultas. Para auditoria e reações, CDC preserva. A disponibilidade depende de configuração. Alguns conectores emitem antes/depois; outros só depois. Updates frequentes podem gerar alto volume. Compactação por chave mantém último estado em Kafka, mas elimina intermediários para consumidores que leem depois. Tópicos de auditoria e de estado podem ser separados. O consumidor precisa saber. Tombstones representam remoção em logs compactados. Ignorá-los deixa registros órfãos em cache.
Viabiliza projeções, cache e busca quase em tempo real
Um evento de dispositivo alterado pode atualizar Elasticsearch, Redis, data lake e dashboard. A latência pode ser segundos ou menos, mas não deve ser prometida sem medir. O pipeline inclui banco, conector, broker e consumidor. Cada etapa possui lag. Métricas de source lag, queue lag e consumer lag mostram. Se o índice está atrasado, a API pode usar o banco para leituras críticas. Consistência eventual precisa ser aceita. Um usuário que renomeia o cômodo pode ver o nome antigo por alguns segundos. Para comando de fechadura, o estado confirmado não deve depender exclusivamente de uma projeção atrasada.
Cria trilha técnica para reconstrução e integração
Com retenção suficiente, consumidores podem ser reexecutados desde uma posição e reconstruir projeções. Isso reduz backups de cache. O log CDC não substitui backup do banco; pode não conter schema completo, dados anteriores ou retenção longa. Para replay, eventos precisam de versão e ordem. O consumidor deve ser idempotente. Se o conector publica pelo menos uma vez, duplicatas ocorrem. Chave e offset ajudam. A reconstrução é ensaiada. Uma topologia que só funciona no fluxo contínuo e nunca foi restaurada é frágil. O custo de retenção deve ser calculado.