Tech & Data

Arquitectura de dados em tempo real com Maxwell + Kafka

Como capturar mudanças de base de dados MySQL em tempo real com Maxwell Daemon e publicar no Kafka para alimentar pipelines downstream.

Arquitectura de dados em tempo real com Maxwell + Kafka

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.