Ir para o conteúdo
Voltar ao blog
Desenvolvimento 9 min

Arquitetura Orientada a Eventos: Kafka ou RabbitMQ para Escalar?

Guia técnico sobre Arquiteturas Orientadas a Eventos (EDA). Comparação real entre Kafka e RabbitMQ, padrões de implementação e código para microsserviços.

Diagrama técnico comparativo entre fluxos de dados do Kafka e RabbitMQ em uma rede de microsserviços.

Lançar um sistema distribuído e esperar que as requisições HTTP síncronas mantenham a sanidade é o equivalente técnico a brincar de telefone sem fio com um megafone: eventualmente, alguém fica surdo ou a mensagem se perde. A Arquitetura Orientada a Eventos (EDA) não é uma moda; é a resposta à fragilidade dos sistemas acoplados que morrem quando um único serviço demora 200ms a mais do que o esperado.

O fim do acoplamento temporal

Em uma arquitetura tradicional, se o Serviço A precisa que o Serviço B processe algo, ele espera por uma resposta. Se o B estiver fora do ar, o A falha. A EDA quebra essa corrente. Os serviços não se chamam; eles emitem fatos (eventos) sobre o que aconteceu. Um evento é uma notificação imutável de que algo ocorreu no passado: OrderPlaced, PaymentValidated, InventoryDepleted.

A vantagem não é apenas técnica; é de negócio. Permite que múltiplos consumidores reajam ao mesmo evento sem que o produtor saiba que eles existem. Esta topologia de 'publicar e esquecer' é o que permite que empresas como Uber ou Netflix gerenciem milhões de transações por segundo sem colapsar sob o peso das latências de rede.

Kafka vs. RabbitMQ: Não são a mesma coisa e nunca foram

É comum ouvir que ambos são "filas de mensagens", mas operam sob filosofias radicalmente distintas. A escolha errada aqui pode custar meses de refatoração.

RabbitMQ: O carteiro inteligente

O RabbitMQ é um message broker tradicional. Ele garante que a mensagem vá do ponto A ao ponto B. Assim que um consumidor confirma a leitura (ACK), a mensagem desaparece da fila. É ideal para tarefas transacionais onde a ordem exata e a entrega garantida são críticas, mas não precisamos reler o passado.

Apache Kafka: O diário imutável

O Kafka é um log de eventos distribuído. Ele não deleta as mensagens após a leitura; ele as armazena em disco por um período de retenção definido. Isso permite que um novo serviço se conecte hoje e leia tudo o que aconteceu há três dias para reconstruir seu estado. É, essencialmente, um banco de dados otimizado para escrita sequencial massiva.

"Use RabbitMQ se precisar de roteamento complexo e lógica de prioridade. Use Kafka se precisar processar fluxos de dados em tempo real e persistência à prova de balas."
  • RabbitMQ: Baseado em Push. O broker empurra mensagens para os consumidores.
  • Kafka: Baseado em Pull. Os consumidores solicitam dados ao broker no seu próprio ritmo.
  • Escalabilidade: O Kafka escala horizontalmente de forma nativa via partições; o RabbitMQ exige configurações de cluster mais delicadas para volumes massivos.

Padrões de implementação real

Implementar EDA não é apenas instalar um broker. Requer padrões específicos para evitar o caos de dados:

  1. Outbox Pattern: Evita a dessincronização entre seu banco de dados e o broker. Você escreve o evento em uma tabela de 'Outbox' na mesma transação que seus dados de negócio, e um processo separado o publica.
  2. Event Sourcing: Em vez de salvar apenas o estado atual (ex: saldo = 100), você salva todos os eventos que levaram a esse estado (+50, +70, -20).
  3. CQRS (Command Query Responsibility Segregation): Separa a escrita (Comandos) da leitura (Consultas), usando eventos para manter a visão de leitura atualizada.

Exemplo de código: Produtor em Node.js com KafkaJS

const { Kafka } = require('kafkajs');

const kafka = new Kafka({
  clientId: 'order-service',
  brokers: ['localhost:9092']
});

const producer = kafka.producer();

const run = async () => {
  await producer.connect();
  await producer.send({
    topic: 'orders',
    messages: [
      { value: JSON.stringify({ id: '123', status: 'created', user: 'juls_user' }) },
    ],
  });
};

run().catch(console.error);

Estratégias de tratamento de erros: Dead Letter Queues (DLQ)

O que acontece quando um evento falha? Você não pode simplesmente parar o fluxo. É aqui que entram as DLQs. Se um consumidor não consegue processar uma mensagem após N tentativas, a mensagem vai para uma fila de "letras mortas" para inspeção manual ou tentativa agendada. Isso evita o envenenamento da fila, onde uma única mensagem malformada interrompe todo o processamento da empresa.

Como abordamos isso na Julsmind SAS

Na Julsmind SAS, desenhamos arquiteturas de eventos para clientes nos EUA e LATAM que lidam com picos de tráfego imprevisíveis. Não aplicamos uma solução única; analisamos se o seu caso de uso exige a baixa latência do RabbitMQ ou o throughput massivo do Kafka no AWS MSK ou Confluent. Nossa abordagem a partir de Medellín é construir sistemas resilientes que não apenas funcionam hoje, mas permitem adicionar novas funcionalidades amanhã sem tocar em uma única linha do código transacional central.

Se sua arquitetura atual parece um castelo de cartas prestes a cair por uma falha de rede, vamos conversar. Podemos ajudar você a migrar para um ecossistema orientado a eventos que escala com o seu negócio. Conte-nos seu desafio em nossa página de contato.

Tem um projeto em mente?

Solicite um orçamento gratuito com a nossa equipe — sem compromisso.

Solicitar orçamento