Change Data Capture (CDC) é um padrão fundamental para arquitecturas de dados modernas: em vez de polling periódico à base de dados, capturamos cada INSERT, UPDATE e DELETE à medida que acontecem e publicamos como eventos num stream. Maxwell Daemon é uma das ferramentas mais simples e robustas para fazer CDC de MySQL para Kafka.
O que é Maxwell Daemon
Maxwell é um processo Java que lê o binlog do MySQL — o log de replicação que o MySQL usa para sincronizar réplicas. Em vez de enviar as mudanças para uma réplica, Maxwell transforma cada operação num evento JSON e publica-o num tópico Kafka.
A configuração básica é surpreendentemente simples: aponta o Maxwell para o teu MySQL com permissões de replicação, configura o broker Kafka, e em minutos tens um stream de todos os eventos da base de dados a fluir para o Kafka.
Exemplo de evento Maxwell
Para um UPDATE numa tabela orders, Maxwell publica algo como:
{"database":"shop","table":"orders","type":"update","ts":1750000000,"data":{"id":42,"status":"shipped","updated_at":"2026-02-15"},"old":{"status":"pending"}}O campo old com os valores anteriores é especialmente valioso — permite rastrear transições de estado sem comparação com snapshots.
Casos de uso práticos
- Sincronização para Elasticsearch: indexa mudanças em tempo real para pesquisa full-text sem polling
- Cache invalidation: invalida entradas de cache exactamente quando os dados mudam
- Data warehouse replication: alimenta tabelas no data warehouse com latência de segundos
- Audit log: registo completo de todas as mudanças de dados, com valores anteriores e posteriores
- Event sourcing: transforma um sistema CRUD legado em produtor de eventos sem alterar a aplicação
Considerações de produção
O binlog do MySQL precisa de estar no formato ROW (não STATEMENT ou MIXED) para o Maxwell funcionar correctamente. Em produção, garante que o Maxwell tem permissões mínimas necessárias: REPLICATION SLAVE, REPLICATION CLIENT, e SELECT nas tabelas a monitorizar.
Para alta disponibilidade, o Maxwell armazena o seu estado (posição no binlog) numa tabela no próprio MySQL — o que permite reiniciar sem perder eventos. Em caso de paragem prolongada, o binlog pode ser rotacionado e os eventos perdidos, por isso configura uma retenção de binlog adequada (recomendo mínimo 7 dias em produção).
Maxwell vs Debezium
Debezium é a alternativa mais completa (suporta PostgreSQL, MongoDB, Oracle para além do MySQL) e integra-se nativamente como Kafka Connector. Maxwell é mais simples de configurar e operar para casos MySQL-only. Para equipas sem experiência em Kafka Connect, Maxwell é frequentemente a escolha mais rápida de pôr a funcionar.