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.
Contenidos
¿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.
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.
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
Recursos y Formación
Otra herramienta popular es Apache Pulsar, similar a Apache Kafka, pero con algunas ventajas muy interesantes sobre este sistema. Te recomiendo leer la entrada de Introducción a Pulsar y diferencias con Kafka.
Si quieres aprender Apache Kafka a fondo y convertirte en experto, no dudes en invertir en tu formación a largo plazo. Para ello, te dejo mi propio curso en español en el que aprenderás desde cero: con partes teóricas y partes prácticas. Es un curso fundamental para quien desee implementar sistemas escalables de procesamiento de datos en tiempo real.
¡Aquí abajo tienes un enlace con un cupón!
Comienza con Kafka: Curso de Apache Kafka desde Cero
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!