RabbitMQ vs Kafka vs Pulsar

Comparação entre as três principais tecnologias de mensageria/streaming distribuído.


🐇 RabbitMQ — Message Broker

Tipo: Broker de mensagens tradicional (push-based)

Como funciona

  • Producers (Web Apps, Mobile, IoT) publicam mensagens para o Broker
  • O Broker possui um sistema de Exchange que roteia as mensagens por meio de Binding Rules para as Queues
  • Os consumers recebem as mensagens via push (competing consumers)

Tipos de Exchange

TipoDescrição
DirectRoteia para uma fila específica via Binding Key
TopicRoteia com base em padrões (Routing Pattern)
FanoutEnvia para todas as filas vinculadas ao mesmo tempo

Características principais

  • Foco em roteamento flexível de mensagens
  • Modelo push: o broker empurra mensagens para os consumers
  • Ideal para workflows, tarefas assíncronas e comunicação entre serviços
  • Mensagens são geralmente consumidas e removidas da fila

Kafka — Event Streaming

Tipo: Plataforma de streaming de eventos distribuída (pull-based)

Como funciona

  • Producers fazem append de eventos no líder da partição dentro de um Kafka Cluster
  • O cluster é composto por múltiplos Brokers, cada um com Partitions (Leader + Replicas)
  • Os consumers fazem poll (requisição ativa) baseado em offset

Arquitetura de cluster

  • Cada partição tem um Leader e Replicas distribuídas entre os brokers
  • A replicação garante alta disponibilidade e tolerância a falhas
  • O offset permite que consumers leiam e releiam eventos no tempo

Características principais

  • Foco em throughput altíssimo e retenção de eventos
  • Modelo pull/offset-based: consumers controlam o que já leram
  • Ideal para pipelines de dados, event sourcing, analytics em tempo real
  • Mensagens ficam armazenadas por um período configurável

🌊 Pulsar — All-in-One

Tipo: Sistema unificado de mensageria e streaming (cursor-based)

Como funciona

  • Producers publicam mensagens para o Broker Pulsar, que possui partições internas
  • As mensagens são armazenadas de forma separada no BookKeeper (camada de armazenamento)
  • O BookKeeper organiza os dados em Ledgers (segmentos) distribuídos entre Bookies
  • Consumers acessam via Subscription com modelo cursor-based

Arquitetura separada (compute vs storage)

  • Brokers: responsáveis apenas pelo processamento
  • BookKeeper: responsável apenas pelo armazenamento
  • Essa separação permite escalar cada camada de forma independente

Características principais

  • Combina o melhor do RabbitMQ (filas, subscriptions) com o do Kafka (streaming, retenção)
  • Modelo cursor-based: cada subscription mantém seu próprio cursor de leitura
  • Ideal para cenários que exigem flexibilidade tanto em mensageria quanto em streaming
  • Suporte nativo a multi-tenancy e geo-replicação

📊 Comparativo Rápido

CritérioRabbitMQKafkaPulsar
ModeloPushPull (offset)Pull (cursor)
ArmazenamentoTemporário (na fila)Durável (log)Durável (BookKeeper)
Caso de uso principalTask queues, workflowsEvent streaming, pipelinesAll-in-one (filas + streaming)
ThroughputMédioMuito altoAlto
ComplexidadeBaixaMédiaAlta
RoteamentoFlexível (Exchange)Por partição/tópicoPor tópico/partição

Fonte: ByteByteGo