Apache Kafka y RabbitMQ son dos corredores de mensajería ampliamente utilizados que le permiten compartir mensajes entre aplicaciones.¿Cuáles son sus características más importantes y cómo se diferencian entre sí? Veamos a los conceptos.
- Conejo.
- Productores
- Consumidores
- Intercambios
- Colas
- Ataduras
- Arquitectura de conejo
- Apache Kafka
- Tema
- Director
- Consumidor
- Corredor
- Grupo
- Archivo de registro
- Particiones
- Arquitectura Apache Kafka
- Rabbitmq vs. Kafka
- №1. Arquitectura
- № 2. Retención de mensajes
- №3. Balanceo de carga
- № 4. Enrutamiento
- № 5. ordenar mensajes
- Los principales casos de uso de RabbitMQ son:
- Comercio electrónico
- Cuidado de la salud
- Servicios financieros
- Sistemas de Internet de las cosas
- Los principales casos de uso de Kafka son
- Análisis en tiempo real
- Agregación de registro
- Aprendizaje automático
- Mi opinión sobre Rabbitmq y Kafka
Conejo.
RabbitMQ es una aplicación de mensajes de código abierto para la comunicación y la mensajería entre las partes. Dado que se desarrolló en Erlang, es muy liviano y eficiente. Erickson desarrolló el lenguaje Erlang con un enfoque en los sistemas distribuidos.
Se considera un corredor de mensajería más tradicional. Se basa en un patrón de editor-subscriber, aunque puede manejar la comunicación sincrónicamente o asincrónicamente, dependiendo de lo que se establezca en la configuración. También proporciona entrega y secuenciación de mensajes entre productores y consumidores.
Admite los protocolos AMQP, STOMP, MQTT, HTTP y Socket Web. Tres modelos de mensajería: Topical, Fanot y Direct:
- Intercambio directo y personalizado por tema o tema [tema]
- Todos los consumidores conectados a la cola reciben un mensaje [fanout]
- Cada consumidor recibe un mensaje enviado por [directo]
Los componentes de RabbitMQ se resumen a continuación:
Productores
Los productores son aplicaciones que crean y envían mensajes a RabbitMQ. Esta puede ser cualquier aplicación que pueda conectarse a RabbitMQ y publicar mensajes.
Consumidores
Los consumidores son aplicaciones que reciben y procesan mensajes de RabbitMQ. Esta puede ser cualquier aplicación que pueda conectarse a RabbitMQ y suscribirse a mensajes.
Intercambios
Los intercambios son responsables de recibir mensajes de los productores y enrutarlos a las colas apropiadas. Existen varios tipos de intercambios, incluidos intercambios directos, intercambios ramificados, intercambios de temas e intercambios de encabezado, cada uno con sus propias reglas de enrutamiento.
Colas
Las colas son donde se almacenan los mensajes hasta que los usan los consumidores. Son creados por aplicaciones o automáticamente por RabbitMQ cuando se publica un mensaje a un intercambio.
Ataduras
Los enlaces definen las relaciones entre intercambios y colas. Definen las reglas de enrutamiento de mensajes que los intercambios utilizan para enrutar mensajes a las colas apropiadas.
Arquitectura de conejo
RabbitMQ utiliza un modelo de extracción para la entrega de mensajes. En este modelo, los consumidores solicitan activamente mensajes del corredor. Se publican mensajes para intercambios responsables de enrutamiento de mensajes a colas apropiadas basadas en claves de enrutamiento.
La arquitectura RabbitMQ se basa en una arquitectura de cliente cliente y consta de varios componentes que trabajan juntos para proporcionar una plataforma de mensajes confiable y escalable. El marco AMQP proporciona intercambios de componentes, colas, enlaces y editores y suscriptores. Los editores publican mensajes a intercambios.
Los intercambios reciben estos mensajes y los asignan a colas de 0 a N en función de ciertas reglas (enlaces). Los consumidores pueden recuperar los mensajes almacenados en las colas. En términos simplificados, la gestión de mensajes se realiza en RabbitMQ de la siguiente manera:
Fuente de la imagen: VMware
- Los editores envían mensajes al intercambio;
- Exchange envía mensajes a colas y otros intercambios;
- Cuando se recibe un mensaje, RabbitMQ envía reconocimientos a los remitentes;
- Los consumidores mantienen conexiones TCP persistentes con RabbitMQ y anuncian qué cola están recibiendo;
- RabbitMQ reenvía mensajes a los consumidores;
- Los consumidores envían confirmaciones de recepción exitosa o errónea del mensaje;
- Tras el recibo exitoso, el mensaje se elimina de la cola.
Apache Kafka
Apache Kafka es una solución de mensajería distribuida de código abierto desarrollada por LinkedIn en Scala. Es capaz de procesar mensajes y almacenarlos utilizando un modelo de editor-subscriber con alta escalabilidad y rendimiento.
Para almacenar eventos o mensajes recibidos, clasifique los temas en nodos utilizando particiones. Combina los patrones de colas de subscriber y colas de mensajes de editor y es responsable de garantizar el orden de mensajes para cada consumidor.
Kafka se especializa en un alto rendimiento de datos y baja latencia para manejar flujos de datos en tiempo real. Esto se logra evitando demasiada lógica en el lado del servidor (corredor), así como algunos detalles especiales de implementación.
Por ejemplo, Kafka no usa RAM y escribe datos inmediatamente al sistema de archivos del servidor. Dado que todos los datos se escriben secuencialmente, se logra el rendimiento de lectura-escritura comparable a la RAM.
Estos son los conceptos centrales de Kafka que lo hacen escalable, performre y tolerante a fallas:
Tema
Un tema es una forma de etiquetar o clasificar un mensaje; Imagina un armario con 10 cajones; Cada cajón podría ser un tema, y el armario es una plataforma Apache Kafka, por lo que además de clasificar grupos de mensajes, otra mejor analogía con un tema estaría en bases de datos relacionales.
Director
Un productor o productor es alguien que se conecta a una plataforma de mensajería y envía uno o más mensajes sobre un tema en particular.
Consumidor
Un consumidor es alguien que se conecta a una plataforma de mensajería y consume uno o más mensajes sobre un tema en particular.
Corredor
El concepto de un corredor en la plataforma Kafka no es otro que prácticamente Kafka, y es el corredor quien administra temas y determina cómo se almacenan los mensajes, registros, etc.
Grupo
Un grupo es una colección de corredores que se comunican entre sí o no para una mejor escalabilidad y tolerancia a fallas.
Archivo de registro
Cada tema almacena sus registros en un formato de revista, es decir, en un orden estructurado y secuencial; Por lo tanto, un archivo de revista es un archivo que contiene información sobre un tema.
Particiones
Las secciones son el nivel de particiones de mensajes en un tema; Esta partición proporciona elasticidad, tolerancia a fallas y escalabilidad a Apache Kafka, para que cada tema pueda tener múltiples secciones en diferentes ubicaciones.
Arquitectura Apache Kafka
Kafka se basa en un modelo de notificación push para la entrega de mensajes. Usando este modelo, los mensajes en Kafka se envían activamente a los consumidores. Se publican mensajes a los temas que se organizan en secciones y se distribuyen a diferentes corredores en el clúster.
Los consumidores pueden suscribirse a uno o más temas y recibir mensajes a medida que se crean en esos temas.
En Kafka, cada tema se divide en una o más secciones. Es en la sección que se finalizan los eventos.
Si hay más de un corredor en el clúster, las particiones se distribuirán de manera uniforme en todos los corredores (tanto como sea posible), lo que permite que la carga de escritura y lectura en un solo tema se amplíe en múltiples corredores a la vez. Dado que este es un clúster, se ejecuta usando ZOOKEEPER para la sincronización.
Recibe tiendas y asigna escrituras. Un registro es datos generados por algún nodo del sistema, que puede ser un evento o información. Se envía al clúster y el clúster lo almacena en la partición del tema.
Cada entrada tiene un desplazamiento de secuencia, y el consumidor puede controlar el desplazamiento utilizado. Por lo tanto, si es necesario volver a procesar un tema, se puede hacer en función del desplazamiento.
Fuente de la imagen: Wikipedia
La lógica, como administrar el identificador del último mensaje de lectura del consumidor o decidir a qué sección escribir datos recién llegados, se transfiere por completo al cliente (productor o consumidor).
Además de los conceptos de productor y consumidor, también están los conceptos de tema, partición y replicación.
Un tema describe una categoría de mensajes. Kafka proporciona tolerancia a fallas al replicar los datos en un tema y escalar al dividir un tema en múltiples servidores.
Rabbitmq vs. Kafka
Las principales diferencias entre Apache Kafka y RabbitMQ están relacionadas con los modelos de entrega de mensajes fundamentalmente diferentes implementados en estos sistemas.
En particular, Apache Kafka trabaja en el principio de extracción, donde los consumidores mismos reciben los mensajes que desean de un tema.
RabbitMQ, por otro lado, implementa un modelo de empuje enviando los mensajes necesarios a los destinatarios. Por lo tanto, Kafka difiere de RabbitMQ de las siguientes maneras:
№1. Arquitectura
Una de las mayores diferencias entre RabbitMQ y Kafka es la diferencia en la arquitectura. RabbitMQ utiliza una arquitectura tradicional de colas de mensajes basada en corredores, mientras que Kafka utiliza una arquitectura de plataforma de transmisión distribuida.
Además, RabbitMQ utiliza un modelo de entrega de mensajes basado en solicitudes, mientras que Kafka usa un modelo basado en el envío.
№ 2. Retención de mensajes
RabbitMQ coloca un mensaje en una cola FIFO (primera entrada – primera salida) y monitorea el estado de ese mensaje en la cola, mientras que Kafka agrega el mensaje al registro (escribe en disco), dejando al destinatario preocuparse por obtener la información necesariadel hilo.
RabbitMQ elimina el mensaje después de que se haya entregado al destinatario, mientras que Kafka guarda el mensaje hasta que se programe una limpieza de registros.
Por lo tanto, Kafka guarda los estados del sistema actuales y todos los anteriores y puede usarse como una fuente confiable de datos históricos, a diferencia de RabbitMQ.
№3. Balanceo de carga
Debido al modelo de entrega de mensajes basado en Mensos de RabbitMQ, reduce la latencia. Sin embargo, los destinatarios pueden sentirse abrumados si los mensajes llegan a la cola más rápido de lo que pueden procesarlos.
Dado que en RabbitMQ, cada receptor solicita/descarga un número diferente de mensajes, la distribución del trabajo puede volverse desigual, causando demoras y pérdida de orden de mensajes en el procesamiento.
Para evitar esto, cada receptor de RabbitMQ configura un límite para la prioridad, un límite en el número de mensajes no confirmados acumulados. En Kafka, el equilibrio de carga se realiza automáticamente reasignando a los receptores a particiones (partición) de la parte superior.
№ 4. Enrutamiento
RabbitMQ incluye cuatro métodos de enrutamiento para diferentes intercambios para hacer colas, lo que permite un conjunto potente y flexible de patrones de intercambio de mensajes. Kafka implementa solo una forma de escribir mensajes en el disco sin enrutamiento.
№ 5. ordenar mensajes
RabbitMQ le permite mantener un orden relativo en conjuntos arbitrarios (grupos) de eventos, y Apache Kafka proporciona una forma simple de mantener el orden con escalabilidad escribiendo secuencialmente mensajes a un registro replicado (tema).
FeurerabbitMqarchitecture Kafkasaves Mensajes en el disco, la plataforma de transmisión distribuida de corredor de corredor de transmisión arquitectura de Model de entrega basada en la entrega basada en la entrega basada en los mensajes de entrega de la entrega basadasEscribir en un procesamiento de topicextternal no se requiere en el inicio
Rabbitmq y Kafka son sistemas de mensajería ampliamente utilizados, cada uno con sus propias fortalezas y casos de uso. RabbitMQ es un sistema de mensajería flexible, confiable y escalable que maneja bien las colas de mensajes, lo que lo convierte en una opción ideal para aplicaciones que requieren una entrega de mensajes confiable y flexible.
Por otro lado, Kafka es una plataforma de transmisión distribuida diseñada para el procesamiento de alto rendimiento y en tiempo real de grandes cantidades de datos, lo que lo convierte en una excelente opción para aplicaciones que requieren procesamiento y análisis de datos en tiempo real.
Los principales casos de uso de RabbitMQ son:
Comercio electrónico
RabbitMQ se utiliza en aplicaciones de comercio electrónico para administrar el flujo de datos entre diferentes sistemas, como la gestión de inventario, el procesamiento de pedidos y el procesamiento de pagos. Puede manejar grandes volúmenes de mensajes y asegurarse de que se entreguen de manera confiable en el orden correcto.
Cuidado de la salud
En la atención médica, RabbitMQ se utiliza para compartir datos entre diferentes sistemas, como los registros de salud electrónicos (EHR), los dispositivos médicos y los sistemas de apoyo a las decisiones clínicas. Esto puede ayudar a mejorar la atención del paciente y reducir los errores asegurando que la información correcta esté disponible en el momento adecuado.
Servicios financieros
RabbitMQ permite mensajes en tiempo real entre sistemas como plataformas comerciales, sistemas de gestión de riesgos y pasarelas de pago. Esto puede ayudar a garantizar que las transacciones se procesen de manera rápida y segura.
Sistemas de Internet de las cosas
RabbitMQ se usa en sistemas IoT para administrar el flujo de datos entre diferentes dispositivos y sensores. Esto puede ayudar a garantizar la entrega de datos segura y eficiente incluso en entornos con ancho de banda limitado y conectividad intermitente.
Kafka es una plataforma de transmisión distribuida diseñada para procesar grandes cantidades de datos en tiempo real.
Los principales casos de uso de Kafka son
Análisis en tiempo real
Kafka se utiliza en aplicaciones de análisis en tiempo real para procesar y analizar datos a medida que se crea, lo que permite a las empresas tomar decisiones basadas en información actualizada. Puede manejar grandes volúmenes de datos y escala para satisfacer las necesidades incluso de las aplicaciones más exigentes.
Agregación de registro
Kafka puede agregar registros de diferentes sistemas y aplicaciones, lo que permite a las empresas rastrear y solucionar problemas en tiempo real. También se puede utilizar para almacenar registros para análisis e informes a largo plazo.
Aprendizaje automático
Kafka se usa en aplicaciones de aprendizaje automático para transmitir datos en modelos en tiempo real, lo que permite a las empresas hacer predicciones y tomar medidas basadas en información actualizada. Esto puede ayudar a mejorar la precisión y la eficiencia de los modelos de aprendizaje automático.
Mi opinión sobre Rabbitmq y Kafka
La desventaja de las capacidades amplias y variadas de RabbitMQ para la gestión flexible de la cola de mensajes es el aumento del consumo de recursos y, por lo tanto, la degradación del rendimiento bajo cargas más altas. Dado que este es el modo de operación de sistemas complejos, en la mayoría de los casos Apache Kafka es la mejor herramienta para la gestión de mensajes.
Por ejemplo, en el caso de recopilar y agregar múltiples eventos de docenas de sistemas y servicios con su geo-redundancia, métricas de clientes, archivos de registro y análisis con la posibilidad de crecientes fuentes de datos, preferiría usar Kafka, sin embargo, si ustedestán en una situación en la que solo necesitas mensajes rápidos, ¡Rabbitmq hará el trabajo muy bien!
También puede leer cómo instalar Apache Kafka en Windows y Linux.