Pular para o conteúdo principal

Pergunta 6 de 50

Kafka versus RabbitMQ

SêniorTech Lead

Pergunta

"Qual a diferença entre Kafka e RabbitMQ, e quando você escolheria um ou outro?"

O que o entrevistador quer avaliar

Se você conhece as duas ferramentas por experiência real ou só por nome. A resposta ideal cita critérios de decisão, não apenas uma lista de features.

Resposta rápida

RabbitMQ é uma fila de mensagens com roteamento sofisticado — exchanges, routing keys, prioridades — voltada a distribuir trabalho entre workers; a mensagem some depois de processada. Kafka é um log distribuído com retenção configurável, voltado a compartilhar eventos entre múltiplos consumidores independentes, com replay nativo. Escolho RabbitMQ quando preciso de roteamento fino de tarefas; Kafka quando preciso que vários sistemas reajam ao mesmo fato de negócio, com possibilidade de reprocessar histórico.

Resposta nível Sênior

A diferença central não é performance, é modelo de dados. RabbitMQ modela filas de trabalho: uma mensagem roteada por uma exchange chega a uma fila e é consumida por um worker; após o ack, ela desaparece. O ponto forte do RabbitMQ é o roteamento — exchanges do tipo direct, topic, fanout e headers permitem regras complexas de distribuição, prioridade de mensagem e dead lettering fino por fila. Kafka modela um log: eventos são anexados a uma partition e retidos por um período configurável, independentemente de terem sido lidos. Isso permite que múltiplos Consumer Groups leiam o mesmo tópico de forma totalmente independente, e que um novo consumidor leia o histórico retido via replay — coisa que RabbitMQ não oferece nativamente. Na prática, escolho RabbitMQ para filas de trabalho internas (processar um envio de e-mail, gerar um PDF) e Kafka para eventos de domínio que múltiplos sistemas de diferentes times consomem.

Explicação aprofundada

Veja a tabela comparativa completa no Capítulo 2.

Exemplo financeiro

Um serviço de emissão de boletos pode usar RabbitMQ internamente para distribuir a tarefa "gerar PDF do boleto" entre workers (trabalho, sem necessidade de replay), e ao mesmo tempo publicar o evento BoletoEmitido no Kafka, para que cobrança, notificação e contabilidade reajam de forma independente.

"RabbitMQ é mais simples, então é sempre pior"

Simplicidade operacional é uma vantagem real do RabbitMQ para casos que não precisam de retenção/replay. Tratar RabbitMQ como "Kafka mais fraco" ignora que são ferramentas para problemas diferentes.

Pode vir a seguir

Follow-ups comuns: "como você faria fan-out (múltiplos consumidores do mesmo dado) no RabbitMQ?" e "você já migrou algo de RabbitMQ para Kafka ou vice-versa? Por quê?".

Capítulos relacionados