← Voltar ao blog

Kafka, RabbitMQ ou SQS: como decidir?

A escolha não começa pela ferramenta. Começa por retenção, padrão de consumo, ordenação, operação e modo de falha desejado.

·
  • #kafka
  • #rabbitmq
  • #sqs
  • #arquitetura orientada a eventos

A pergunta “qual broker é melhor?” quase sempre esconde uma pergunta mais útil: o que precisa acontecer com essa informação depois de publicada? A resposta muda conforme a necessidade é distribuir trabalho, manter um histórico reproduzível ou desacoplar serviços com o menor custo operacional possível.

Quando Kafka faz sentido

Kafka é especialmente forte quando eventos precisam permanecer disponíveis para mais de um consumidor e para reprocessamento posterior. O log retido permite que um novo consumidor leia o passado, que uma correção recalcule projeções e que diferentes equipes usem o mesmo fluxo em ritmos próprios.

Esse modelo pede decisões sobre partição, chave de ordenação, evolução de schema e capacidade de consumidores. A ordem só é garantida dentro da partição; aumentar paralelismo pode alterar essa escolha. É uma ferramenta poderosa, mas exige disciplina de operação e governança de contratos.

Quando RabbitMQ faz sentido

RabbitMQ funciona muito bem como fila de trabalho e roteador de mensagens. Exchanges, bindings, acknowledgements e políticas de entrega ajudam quando a prioridade é entregar uma tarefa para quem vai executá-la, com padrões de roteamento claros e baixa latência.

Ele costuma ser uma escolha direta para comandos assíncronos, tarefas de background e integrações internas. Reprocessamento histórico em grande escala não é seu caso de uso central; tratar uma fila como arquivo de eventos geralmente cria retenção e operação inadequadas.

Quando SQS e SNS fazem sentido

SQS reduz bastante o trabalho operacional para equipes já na AWS. É uma fila gerenciada, elástica e adequada quando o objetivo é desacoplar produtores e consumidores sem administrar clusters. SNS complementa o desenho quando uma publicação precisa chegar a múltiplos destinos.

Em troca, características como ordenação, atraso, visibilidade e reprocessamento dependem do tipo de fila e das configurações escolhidas. Uma FIFO pode resolver uma ordem por grupo, mas muda o perfil de throughput. DLQ também precisa ter uma estratégia de leitura e retorno — não deve virar armazenamento permanente de problemas.

Uma matriz de decisão curta

Escolha pelo comportamento desejado:

  • preciso reter e reproduzir eventos? Kafka tende a se encaixar melhor;
  • preciso distribuir tarefas e rotear mensagens? RabbitMQ é um candidato natural;
  • quero uma fila gerenciada com integração AWS? SQS/SNS reduz a superfície operacional;
  • preciso de ordem? defina antes a chave que realmente precisa ser ordenada;
  • preciso recuperar falhas? desenhe idempotência, DLQ e reprocessamento antes do primeiro deploy.

Nenhuma dessas tecnologias remove a necessidade de contratos, observabilidade e um modelo de falhas. A ferramenta certa é a que torna essas decisões mais simples para o problema que você realmente tem.