Eligiendo un Broker de Mensajería : Kafka vs. RabbitMQ

Martín D Cernadas
Naranja X Tech
Published in
3 min readAug 18, 2021

--

Apache Kafka y RabbitMQ son dos brókers de mensajería muy extendidos que permiten desacoplar el intercambio de mensajes entre las aplicaciones, haciendo uso de algún patrón (Pub-Sub o sino Colas) . ¿Cuáles son sus características y diferencias más importantes para poder tomar una decisión entre uno u otro? Vayamos a los conceptos.

- Bróker de mensajería

Tecnologías que están dedicadas a procesar e intercambiar mensajes de datos entre aplicaciones, haciendo de mediador entre las mismas. Esta característica reduce el acoplamiento.

  • enrutan los mensajes, desacoplan los productores de mensajes de los consumidores, organizan y comprueban los mensajes, almacenan los mensajes.

- Patrones de mensajería

Dos patrones de mensajería son los principales: Colas de mensajes (Queue) y publicador-suscriptor (Pub-Sub).

Las colas de mensajes ofrecen la mejor oportunidad para escalar el procesamiento, la desventaja principal es que no aceptan varios suscriptores en cada cola. El publicador-suscriptor permite transmitir eventos de forma asíncrona sin necesidad de emparejar los productores con los consumidores. También es capaz de difundir mensajes a grupos de consumidores, pero la escalabilidad es más complicada.

- Apache Kafka

Apache Kafka es capaz de procesar mensajes y almacenarlos con un modelo publicador-suscriptor con una alta escalabilidad y rendimiento. Para almacenar los eventos o mensajes recibidos, distribuye los topics entre los nodos mediante particiones. Combina los dos patrones de mensajería descritos anteriormente, las colas de mensajes con publicador-suscriptor, obteniendo las ventajas de ambos. También se encarga de garantizar el orden de los mensajes para cada consumidor.

Se ha transformado en una plataforma capaz de almacenar y procesar flujos de eventos en tiempo real.

Ventajas:

  • Buena escalabilidad, tolerancia a fallos, plataforma de streaming, multi-tenant, tiempo real, integrable con productos de terceros [Tibco, Mule e incluso Java]

Desventajas:

  • Dependencia con Apache Zookeeper, sin enrutamiento de mensajes, carece de componentes de monitorización nativos.

- RabbitMQ

Es considerado como un bróker de mensajería más tradicional. Se basa en el patrón publicador-subscriptor, aunque puede tratar la comunicación de manera síncrona o asíncrona, según se establezca en la configuración. También garantiza la entrega y el orden de los mensajes entre los productores y los consumidores.

Soporta protocolos AMQP, STOMP, MQTT, HTTP y websockets.

Tres modelos para el intercambio de mensajes: topic, fanout y direct:

  • Intercambio directo e individual por topico o tema [topic]
  • Todos los consumidores conectados a la cola reciben el mensaje [fanout]
  • Cada consumidor recibe un mensaje enviado [direct]

Si no existe un consumidor conectado al exchange/intercambio, el mensaje se puede perder (en Kafka, sin embargo, cualquier consumidor podría consumirlo evitando su pérdida).

Ventajas:

  • Adecuado para muchos protocolos de mensajería, flexibilidad y plugins disponibles, herramientas de desarrollo varias.

Desventajas:

  • No es transaccional por defecto, basado en Erlang para desarrollos.

- ¿Qué diferencias existen entre Apache Kafka y RabbitMQ?

(1) Kafka tiene un rendimiento y escalabilidad superior a RabbitMQ, por lo que es mucho más usado en proyectos en los que se desea una alta tolerancia a fallos y procesamiento en tiempo real. RabbitMQ es un sistema más flexible y con un enrutado de mensajes más completo.

(2) Kafka es 15 veces más rápido en todo el overall con respecto a RabbitMQ, e incluso tiene menor latencia (*).

(*) Basado en artículos originales de Confluent y TrustRadius.

--

--

Martín D Cernadas
Naranja X Tech

IT Cloud Architect, Native & Sincretic Medicine Writer