Pular para o conteúdo principal
Sumário do livro

Parte I — Fundamentos

Kafka versus outras ferramentas

Comparação técnica entre Kafka, RabbitMQ, AWS SQS, AWS SNS e Google Pub/Sub.

Nesta página

Uma das perguntas mais comuns em entrevista é comparar Kafka com outra ferramenta de mensageria que o candidato já usou. Isso não é bizantinismo de nomenclatura — cada ferramenta foi desenhada para um modelo de uso diferente, e escolher errado tem custo real em produção.

O eixo que realmente importa: fila de trabalho vs. log de eventos

Antes de comparar recursos, é preciso separar as ferramentas em duas famílias:

  • Filas de trabalho (RabbitMQ, AWS SQS): cada mensagem deve ser processada por exatamente um consumidor; depois de processada (ack), ela normalmente desaparece.
  • Log de eventos / pub-sub com retenção (Kafka, e — com particularidades — AWS SNS + Google Pub/Sub): o mesmo evento pode ser lido por múltiplos consumidores independentes, e pode continuar disponível depois de lido.

Ignorar essa diferença é a causa mais comum de escolher a ferramenta errada.

Kafka vs. RabbitMQ

Kafka vs. RabbitMQ

CritérioKafkaRabbitMQ
ModeloLog distribuído, particionadoFila de mensagens (com exchanges/routing)
RetençãoConfigurável (tempo/tamanho), mensagem persiste após consumoMensagem some após ack (a menos que configurado de outra forma)
ReplayNativo — resetar offset relê o históricoNão nativo — exige reenvio manual
OrdenaçãoGarantida por partitionGarantida por fila (FIFO), mais simples de raciocinar em fila única
Múltiplos consumidores do mesmo dadoNatural, via Consumer Groups distintosExige fan-out explícito (exchange do tipo fanout)
Throughput em alta escalaMuito alto, desenhado para volumeAlto, mas com overhead maior de roteamento por mensagem
Roteamento complexo (regras, prioridade)Limitado — roteamento é por tópico/partition/keyRico — exchanges, routing keys, prioridade de mensagem
Curva operacionalMais alta (cluster, partições, retenção)Mais baixa para casos simples

RabbitMQ brilha quando o requisito é roteamento sofisticado de mensagens de trabalho — prioridades, dead lettering fino, múltiplos padrões de exchange. Kafka brilha quando o requisito é um histórico de eventos compartilhado por múltiplos consumidores, com necessidade de replay.

Kafka vs. AWS SQS

Kafka vs. AWS SQS

CritérioKafkaAWS SQS
ModeloLog distribuídoFila gerenciada (Standard ou FIFO)
Retenção após consumoSim (até o limite de retenção do tópico)Não — mensagem é removida após ack (ou expira)
ReplayNativoNão — só via DLQ redrive (reprocessar mensagens que falharam, não histórico completo)
OrdenaçãoPor partitionFIFO garante ordem por message group; Standard não garante ordem
OperaçãoVocê gerencia o cluster (ou usa serviço gerenciado como MSK/Confluent Cloud)Totalmente gerenciado pela AWS, zero infraestrutura
Escala de consumidores independentesNativa (múltiplos Consumer Groups)Requer SNS + múltiplas filas para fan-out
ThroughputMuito altoAlto, com limites de throughput por fila (Standard escala melhor que FIFO)

SQS FIFO não é Kafka

SQS FIFO garante ordem dentro de um message group e evita duplicidade — mas continua sendo uma fila: a mensagem lida some da fila. Ele resolve ordenação, não resolve retenção/replay nem múltiplos consumidores independentes do mesmo dado sem duplicar a mensagem via SNS.

Kafka vs. AWS SNS

SNS é um serviço de pub/sub puro (fan-out): uma mensagem publicada é entregue a todos os assinantes (filas SQS, endpoints HTTP, Lambda). É comum encontrar o padrão SNS + SQS: SNS distribui, cada SQS consome de forma independente — isso reproduz parcialmente o que Kafka faz nativamente com Consumer Groups, mas sem retenção de longo prazo nem replay do histórico: uma vez entregue e processada, a mensagem não pode ser relida a partir do SNS.

Kafka vs. Google Pub/Sub

Kafka vs. Google Pub/Sub

CritérioKafkaGoogle Pub/Sub
ModeloLog particionado, gerenciado por você (ou serviço gerenciado)Pub/sub totalmente gerenciado
RetençãoConfigurável, tipicamente diasConfigurável, até 31 dias (mensagens já confirmadas por padrão não ficam retidas do mesmo jeito)
ReplayNativo via offsetVia seek, suportado, mas com semântica diferente de offset por partition
OrdenaçãoPor partition (key)Por ordering key, opcional e com custo de throughput
OperaçãoRequer gestão de cluster (ou serviço gerenciado)Zero infraestrutura

Pub/Sub do Google é operacionalmente o mais próximo de "Kafka sem operar Kafka", mas o modelo de partições e o ecossistema de client (especialmente para Java/Spring) ainda favorecem o Kafka em times que já têm essa stack.

Critério de decisão prático

Dica de entrevista

Quando pedirem para comparar, não decore a tabela — explique o critério de decisão: "se preciso que múltiplos serviços independentes leiam o mesmo evento, com possibilidade de replay, penso em Kafka; se preciso distribuir trabalho entre workers, com roteamento rico e baixa necessidade de retenção, penso em RabbitMQ ou SQS". Isso demonstra raciocínio, não memorização.

Escolhendo a ferramenta certa para cada parte do fluxo de pagamento

Em um sistema de pagamentos real, é comum usar as duas famílias ao mesmo tempo: Kafka para o evento de domínio "pagamento aprovado" (que antifraude, contabilidade e notificação consomem de forma independente e podem precisar reprocessar), e uma fila SQS para o trabalho interno de "enviar e-mail de confirmação" (uma tarefa que deve ser processada exatamente uma vez por um worker, sem necessidade de replay).

Resumo

RabbitMQ e SQS modelam filas de trabalho — mensagem processada some. Kafka modela um log de eventos retido, lido por múltiplos consumidores independentes, com replay nativo. SNS resolve fan-out, mas não retenção de longo prazo. Pub/Sub do Google é o mais próximo operacionalmente do Kafka "sem operar cluster", mas com semântica de ordenação e retenção diferente. A escolha certa depende do que se precisa fazer com a mensagem depois que ela é lida a primeira vez.

Pode vir a seguir

Prepare-se também para: "você usaria Kafka para tudo?", "como você faria fan-out sem Kafka?" e "o que aconteceria se você usasse SQS para um caso que precisa de replay?".