Kafka vs RabbitMQ: Bróker de mensajería

Última actualización: 04/10/2020

Apache Kafka vs RabbitMQ: dos brókers de mensajería muy populares para desacoplar el intercambio de mensajes entre las aplicaciones big data. En esta entrada vamos a explorar sus características y diferencias más importantes para poder tomar una decisión acertada al incorporar estas herramientas a nuestros sistemas.

Kafka vs RabbitMQ

¿Qué es un bróker de mensajería?

A medida que el volumen de datos a procesar por las organizaciones ha crecido, se han vuelto fundamentales los sistemas capaces de intercambiar mensajes de forma eficiente. Estos sistemas deben procesar los mensajes generados a una gran velocidad, que no para de crecer a medida que se incorporan millones de dispositivos a la red.

Estas tecnologías están dedicadas a procesar e intercambiar mensajes de datos entre aplicaciones. Además, hacen de mediador entre los sistemas, que no tienen por qué conocerse mutuamente. Esta característica reduce el acoplamiento y permite escalar el sistema de una forma más sencilla y potente.

Podemos resumir su función el los siguientes cuatro puntos:

  • Enrutan los mensajes.
  • Desacoplan los productores de mensajes de los consumidores.
  • Organizan y comprueban los mensajes.
  • Almacenan los mensajes.

Patrones de mensajería

Existen dos patrones de mensajería principales: Colas de mensajes y publicador-suscriptor. Vamos a explicar brevemente en qué consiste cada uno de ellos para entender mejor las diferencias que existen y cómo los implementan estas dos tecnologías.

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 patrón de mensajería 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, al tener que gestionar un estado más complejo.

Esquema Pub-Sub

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. Apache Kafka no usa el modelo de colas de mensajes.

También posee numerosas ventajas para hacer streaming de eventos. Kafka Streams es un componente encargado de procesar flujos de datos con operaciones de agregación, creación de ventanas, etc.

Apache Kafka combina los dos patrones de mensajería descritos anteriormente, las colas de mensajes con publicador-suscriptor, obteniendo las ventajas de ambos. Kafka también se encarga de garantizar el orden de los mensajes para cada consumidor.

Esquema de particiones en Kafka
Esquema de particiones en Kafka

Con todo esto, Kafka ha dejado de ser un bróker de mensajería común y 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 de eventos
  • Multi-tenant
  • Capaz de procesar en tiempo real
  • Enfocado a proyectos Big Data

Desventajas:

  • Dependencia con Apache Zookeeper
  • Sin enrutamiento de mensajes
  • Carece de componentes de monitorización

Si quieres aprender más echa un vistazo a mi introducción a Apache Kafka y a la guía de comandos básicos.

RabbitMQ

RabbitMQ es considerado como un bróker de mensajería más tradicional. Contiene varios componentes listos para usar, por lo que es sencillo configurarlo y no requiere mucho trabajo manual. También es open source.

RabbitMQ 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. Al igual que kafka, garantiza la entrega y el orden de los mensajes entre los productores y los consumidores.

La herramienta también se puede desplegar como un clúster y además acepta varias zonas y regiones, tanto en clouds privadas como públicas.

Los protocolos soportados por RabbitMQ son AMQP, STOMP, MQTT, HTTP y websockets.

RabbitMQ tiene tres modelos para el intercambio de mensajes:

  • Intercambio directo e individual por topic
  • Todos los consumidores conectados a la cola reciben el mensaje
  • Cada consumidor recibe un mensaje enviado

En RabbitMQ, si no existe un consumidor conectado al exchange, 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
  • Interfaz moderna e intuitiva
  • Flexibilidad y plugins disponibles
  • Herramientas de desarrollo

Desventajas:

  • No es transaccional por defecto
  • Erlang para desarrollo

Otra herramienta popular es Apache Pulsar, similar a Apache Kafka, pero con algunas ventajas muy interesantes sobre este sistema. Si quieres apreder más, te recomiendo leer la entrada de Introducción a Pulsar y diferencias con Kafka.

Preguntas Frecuentes – FAQ

¿Qué es RabbitMQ?

RabbitMQ es un bróker de mensajería open source. Se encarga de recibir mensajes de productores externos y los envía a los consumidores (Implementa el patrón publicador-subscriptor).

¿Para qué se usa RabbitMQ?

RabbitMQ hace de software intermediario evitando el acoplamiento y las interdependencias entre sistemas. Proporciona a aplicaciones externas la plataforma de comunicación común para recibir y enviar mensajes.

¿Qué diferencias existen entre Apache Kafka y RabbitMQ?

Apache Kafka tiene un rendimiento y escalabilidad superior a RabbitMQ, por lo que es mucho más usado en proyectos Big Data 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.


A continuación el vídeo-resumen. ¡No te lo pierdas!


¡Echa un ojo a mi lista de reproducción de Big Data en Youtube!

Si te ayuda el contenido del blog, por favor considera unirte a la lista de correo para reconocer el trabajo!

Deja una respuesta