Como implementar Change Data Capture em sincronização entre sistemas: guia prático para produção
Aprenda a implementar Change Data Capture em produção para sincronizar sistemas com baixa latência, contratos confiáveis, idempotência, monitoramento e recuperação de falhas.
Max Alex

Neste artigo (8 tópicos)
Sincronizar dados entre sistemas por consultas periódicas ou cargas em lote parece simples até que volume, criticidade e número de consumidores aumentam. Atrasos, duplicidades e divergências passam a exigir uma abordagem mais confiável.
O Change Data Capture (CDC) captura inserções, atualizações e exclusões diretamente da fonte de dados e as transforma em eventos que outros sistemas podem consumir. Este guia apresenta um caminho prático para projetar, implementar e operar CDC em produção.
O que é Change Data Capture e quando ele faz sentido
Change Data Capture é uma técnica para detectar alterações em uma fonte de dados e disponibilizá-las continuamente para destinos interessados. Em vez de consultar repetidamente uma tabela para descobrir o que mudou, o pipeline recebe eventos de criação, alteração e exclusão.
Em um e-commerce, por exemplo, uma atualização de pedido pode chegar ao CRM, ao faturamento e ao estoque poucos segundos após ser confirmada no banco transacional. Isso reduz latência e evita que cada sistema consumidor execute seu próprio polling.
CDC costuma fazer sentido quando há necessidade de baixa latência, muitas integrações dependentes da mesma fonte, alto volume de mudanças ou exigência de rastreabilidade. Ele não elimina decisões importantes: ainda é necessário definir contratos, regras de consistência, segurança e recuperação de falhas.
Para cenários simples, com poucas alterações diárias e tolerância a atrasos, uma carga em lote pode continuar sendo a opção mais econômica. O ganho do CDC aparece quando o custo de manter dados desatualizados supera a complexidade operacional do streaming.
Defina requisitos de produção antes de escolher a ferramenta
Comece pelo problema de negócio, não pelo conector. Liste as fontes e os destinos, as tabelas envolvidas, as chaves primárias e quais operações precisam ser propagadas. Nem toda coluna de uma tabela deve virar dado de integração.
Defina o atraso máximo aceitável por domínio. Pedidos podem admitir até 30 segundos; saldo de estoque pode exigir até 5 segundos. Esses objetivos orientam capacidade, alertas e prioridades de incidente.
- Volume: estime alterações por segundo, tamanho médio dos eventos e picos sazonais.
- Disponibilidade: estabeleça RPO e RTO para origem, broker, consumidores e destino.
- Ordenação: identifique entidades que exigem sequência, como pedido, fatura ou cliente.
- Segurança: classifique campos pessoais, financeiros e credenciais que não podem circular livremente.
- Retenção: determine por quanto tempo eventos e logs precisam ficar disponíveis para auditoria ou reprocessamento.
Também registre quem é responsável por cada dado e como divergências serão tratadas. Um pipeline tecnicamente funcional ainda falha como integração se consumidores interpretarem o mesmo campo de formas diferentes.
Escolha a arquitetura de CDC: logs, gatilhos ou timestamps
Há três abordagens recorrentes para captura de alterações. A mais indicada para produção, quando suportada pelo banco, é a leitura de logs de transação. Ela observa alterações já confirmadas, tende a reduzir impacto no código da aplicação e oferece informações úteis de posição e ordenação.
No PostgreSQL, por exemplo, é possível habilitar replicação lógica e permitir que um conector leia mudanças do WAL. Em bancos com mecanismos equivalentes, a estratégia segue o mesmo princípio: a aplicação grava no banco, e a captura ocorre a partir do log de transações.
Triggers gravam alterações em tabelas auxiliares ou publicam registros de auditoria. Podem ser úteis em ambientes legados, mas aumentam o acoplamento com o banco e precisam ser avaliadas quanto a desempenho, manutenção e comportamento em transações complexas.
Já a estratégia baseada em uma coluna como updated_at é simples para incrementais, mas tem limitações importantes. Exclusões podem não ser detectadas, alterações com timestamps iguais exigem paginação cuidadosa e eventos podem ser perdidos se o controle de cursor for incorreto.
Independentemente da abordagem, mantenha chaves estáveis nas tabelas. Sem um identificador confiável, o destino terá dificuldade para aplicar atualizações e exclusões de forma determinística.
Desenhe o fluxo de eventos e os contratos de dados
Um evento de CDC não deve ser apenas uma cópia crua da linha de banco. Ele precisa dar aos consumidores contexto suficiente para aplicar a mudança com segurança, sem expor dados desnecessários.
Inclua a operação realizada, a chave da entidade, o instante de origem, uma referência à posição do log ou versão da alteração e a versão do schema. Quando fizer sentido, inclua estado anterior e posterior; em outros casos, envie somente os campos permitidos e necessários ao destino.
{
"event_id": "origem-posicao-log",
"entity": "pedido",
"operation": "UPDATE",
"key": { "order_id": "12345" },
"source_timestamp": "2026-10-02T10:15:00Z",
"schema_version": 1,
"data": { "status": "paid" }
}Use a chave principal ou de negócio para particionar eventos. Isso preserva a ordem para uma mesma entidade, mas não cria ordenação global entre todas as entidades. Consumidores precisam ser projetados com essa limitação em mente.
Planeje evolução de schema desde o início. Adicionar campos opcionais costuma ser menos arriscado do que renomear ou remover campos; mudanças incompatíveis devem ter versão, janela de migração e coordenação com os consumidores.
Dados sensíveis exigem minimização, mascaramento e controle de acesso. Um evento de cliente para atendimento, por exemplo, não precisa transportar senha, documento completo ou qualquer atributo que o consumidor não use.
Implemente o pipeline: origem, broker, consumidores e destino
Uma implementação madura separa responsabilidades: a origem registra a mudança; o conector captura; o broker armazena e distribui; consumidores validam, transformam e aplicam os dados em seus destinos.
- Prepare a origem. Habilite o mecanismo de captura compatível com o banco e crie um usuário com apenas as permissões necessárias.
- Configure o conector. Com Debezium e Kafka Connect, defina tabelas incluídas, modo de snapshot, retenção de offsets e serialização dos eventos.
- Execute o snapshot inicial. Planeje janela, carga no banco e forma de garantir que o destino não misture dados iniciais com eventos em tempo real de forma inconsistente.
- Publique no broker. Use tópicos por domínio ou entidade, com particionamento baseado na chave da entidade.
- Implemente consumidores. Valide schema, transforme somente o necessário e mantenha regras de negócio separadas da captura quando possível.
- Persista checkpoints. Registre offsets e estados processados para retomar com segurança após reinícios.
Um fluxo comum é capturar alterações de pedidos no banco, publicar eventos em um tópico, validar o payload em um consumidor e atualizar uma projeção destinada à equipe de atendimento. O sistema de atendimento não precisa acessar diretamente o banco transacional para saber que um pedido mudou.
Evite concentrar validação, transformação, enriquecimento e efeitos de negócio no mesmo conector. Essa separação torna falhas mais fáceis de localizar e permite escalar cada etapa conforme sua demanda.
Garanta idempotência, ordenação e recuperação de falhas
Na prática, muitos pipelines de CDC operam com entrega ao menos uma vez. Isso significa que um consumidor pode receber o mesmo evento mais de uma vez após uma falha, uma retentativa ou uma retomada de offset.
Por isso, consumidores precisam ser idempotentes: processar um evento repetido não pode causar um efeito adicional. Uma abordagem comum é gravar a última versão, posição do log ou identificador de evento aplicado para cada entidade. Se uma versão igual ou anterior chegar novamente, ela é ignorada.
A ordenação também é limitada. Um broker normalmente garante a sequência dentro de uma partição, e não em todo o tópico. Ao usar a chave do pedido como chave de partição, eventos do mesmo pedido seguem ordenados; eventos de pedidos diferentes podem ser processados em paralelo.
Deleções exigem contrato explícito. O evento pode carregar uma operação de exclusão, um tombstone ou uma marca lógica, conforme a necessidade do destino e a política de retenção. Não trate exclusão como detalhe: ela é uma das causas mais comuns de divergência entre sistemas.
Mantenha uma fila de erro para mensagens que não podem ser processadas automaticamente, com contexto suficiente para diagnóstico e reprocessamento. Além disso, execute reconciliações periódicas entre origem e destino para encontrar divergências silenciosas, inclusive as causadas por eventos expirados ou alterações manuais.
Monitore, teste e opere o CDC em produção
CDC em produção é um produto operacional. A implantação só está completa quando há métricas, alertas, testes de recuperação e um procedimento claro para incidentes.
Monitore pelo menos o lag de replicação, a idade do último evento processado, a taxa de eventos, erros do conector, falhas de desserialização, mensagens em fila de erro e taxa de duplicidades descartadas. Acompanhe essas métricas por origem, tópico, consumidor e destino.
Crie alertas conectados ao SLA. Se o lag de pedidos ultrapassar 30 segundos, o alerta deve orientar um runbook: verificar saúde do conector, retenção e disponibilidade dos logs do banco, capacidade do broker, offsets e erros dos consumidores.
Antes de liberar mudanças, teste snapshot inicial, indisponibilidade do broker, reinício do conector, mudança de schema, duplicação de mensagens, eventos fora de ordem e reprocessamento. Testes de carga são especialmente importantes quando há picos previsíveis, como campanhas comerciais ou fechamento financeiro.
Documente a retenção dos tópicos, os responsáveis por cada contrato, os critérios de rollback e o procedimento para reconstruir um destino. Audite também permissões, exposição de dados e alterações na configuração de captura.
Conclusão
Implementar Change Data Capture não é apenas conectar um banco a um broker. Uma solução confiável depende de requisitos claros, captura adequada, contratos evolutivos, consumidores idempotentes e operação observável.
Comece por um domínio com valor claro, como pedidos ou estoque, defina seu SLA e valide o ciclo completo de captura, recuperação e reconciliação. Depois, amplie o padrão para outras integrações.
Quer estruturar uma sincronização de dados confiável entre seus sistemas? A Max Alex pode apoiar o desenho da arquitetura, a implementação do CDC e a operação do pipeline em produção.
Max Alex
Desenvolvedor full stack especializado em SaaS, Laravel, IA aplicada, WhatsApp API, automações e integrações. Criação de sistemas web escaláveis para empresas.
Continue lendo

OpenTelemetry em microserviços: erros que geram falhas, lentidão ou retrabalho
Traces incompletos, overhead e perda de telemetria podem ter causas diferentes. Entenda oito erros de OpenTelemetry em microserviços e use um checklist para diagnosticar, corrigir e validar a instrumentação em produção.

GitHub Actions em monorepos: erros que geram falhas, lentidão ou retrabalho
Seu CI executa projetos demais, ignora dependências ou bloqueia merges? Conheça dez erros de GitHub Actions em monorepos e como verificar filtros, checks, cache, matrizes e permissões.

reverse proxy em APIs backend: erros que geram falhas, lentidão ou retrabalho
Erros de rotas, headers, timeouts e conexões no Nginx podem causar falhas e lentidão em APIs. Veja como localizar a camada responsável, corrigir a configuração e validar o resultado antes de publicar.