1、Casos de uso
1.RabbitMQ:
Adecuado para situaciones que exigen una gran facilidad de uso y flexibilidad
Procesamiento de tareas asíncronas:RabbitMQ proporciona un mecanismo fiable de transmisión de mensajes, adecuado para procesar tareas asíncronas, por ejemplo, colocando las tareas que requieren mucho tiempo en una cola de mensajes para que los consumidores las procesen de forma asíncrona, lo que mejora la capacidad de respuesta y la escalabilidad del sistema.
Desacoplamiento de los componentes del sistema: al utilizar RabbitMQ como intermediario de mensajes, los distintos componentes del sistema pueden desacoplarse mediante mensajes, lo que permite una arquitectura de acoplamiento débil y mejora la mantenibilidad y la flexibilidad del sistema.
Arquitectura orientada a eventos: el patrón de publicación y suscripción de RabbitMQ permite construir una arquitectura orientada a eventos, publicando los eventos del sistema como mensajes en los temas correspondientes; los distintos consumidores pueden suscribirse a los temas que les interesen para realizar el procesamiento pertinente.
2.RocketMQ:
Adecuado para escenarios de procesamiento de datos a gran escala y alto rendimiento
Transacciones distribuidas: RocketMQ admite mensajes transaccionales distribuidos, adecuados para escenarios de transacciones distribuidas que implican varios sistemas de negocio. Garantiza la coherencia y la fiabilidad de los mensajes y, al mismo tiempo, ofrece una gran capacidad de transmisión de mensajes.
Procesamiento de registros en tiempo real: gracias a su alto rendimiento y baja latencia, RocketMQ puede utilizarse para procesar registros en tiempo real, por ejemplo, para recopilar, analizar y agregar registros.
Procesamiento de flujos: RocketMQ admite un modo de procesamiento de flujos que permite transmitir los flujos de datos generados a frameworks de procesamiento de flujos (como Flink y Spark Streaming) mediante colas de mensajes, para procesar y analizar datos en tiempo real.
3.Kafka:
Adecuado para escenarios de procesamiento de flujos de datos en tiempo real y procesamiento en streaming de alto rendimiento
Canalizaciones de datos y procesamiento de datos en tiempo real: el alto rendimiento de Kafka y su almacenamiento persistente lo convierten en una opción ideal para construir canalizaciones de datos fiables y sistemas de procesamiento en tiempo real, destinados a recopilar, transmitir y procesar flujos de datos.
Procesamiento de registros y flujos de eventos:el particionamiento de Kafka y sus garantías de orden lo convierten en una solución ideal para procesar registros y flujos de eventos, por ejemplo, para recopilar registros de aplicaciones, reconstruir estados a partir de eventos y supervisar la actividad del negocio.
Análisis de flujos y aprendizaje automático en tiempo real: Kafka se combina con frameworks de procesamiento de flujos, como Flink y Spark Streaming, para admitir tareas de análisis de flujos y aprendizaje automático en tiempo real, procesando flujos de datos en tiempo real para obtener información inmediata y apoyar la toma de decisiones.
2、Arquitectura del servicio
RabbitMQ
Channel(canal):un Channel es una conexión virtual entre RabbitMQ y la aplicación. Al crear varios canales sobre una conexión física (connection), la aplicación puede realizar operaciones de mensajería de forma concurrente. El canal se encarga de enviar y recibir mensajes, además de ejecutar operaciones relacionadas con ellos, como declarar colas, definir intercambiadores y establecer enlaces. Un canal puede entenderse como una sesión ligera que interactúa con RabbitMQ a través de una conexión física.
Exchange(intercambiador):el intercambiador es el centro de recepción y reenvío de mensajes. Cuando se envía un mensaje a RabbitMQ, se enruta a través de un intercambiador. Según su tipo y sus reglas de vinculación, el intercambiador dirige el mensaje a una o varias colas. Los tipos más habituales incluyen los intercambiadores directos(direct), por temas(topic), de difusión(fanout)y por cabeceras(headers).
Queue(cola):una cola es el búfer que RabbitMQ utiliza para almacenar mensajes. Cuando un mensaje no puede dirigirse de inmediato a un consumidor, se almacena en la cola hasta que un consumidor lo obtenga y lo procese. Cada cola tiene un nombre único, y los mensajes se entregan y consumen en orden FIFO(primero en entrar, primero en salir).
Virtual Host(host virtual):Un host virtual es un entorno de aislamiento lógico que permite dividir un servidor RabbitMQ en varias partes independientes. Cada host virtual tiene sus propios intercambiadores, colas, enlaces y ajustes de permisos. Los hosts virtuales permiten aislar distintas aplicaciones o servicios y ofrecen controles de seguridad y gestión de recursos.
Broker (intermediario): un Broker es una instancia del servidor de colas de mensajes RabbitMQ, responsable de recibir, almacenar y enrutar los mensajes. Actúa como intermediario y entrega a los consumidores los mensajes enviados por los productores. Una instancia de RabbitMQ puede contener varios Brokers, y cada Broker puede alojar varios hosts virtuales y colas.
RocketMQ
NameServer(servidor de nombres):NameServer es el componente de servicio de nombres de RocketMQ, encargado de gestionar y proporcionar la información de enrutamiento de los Broker. Actúa como centro de metadatos y mantiene, entre otros datos, la información de registro de los Broker y las rutas de los Topic. Antes de enviar y recibir mensajes, Producer y Consumer deben interactuar con NameServer para obtener la información correcta de los Broker.
Controller(controlador):Controller es el componente controlador de RocketMQ, encargado de coordinar y gestionar el funcionamiento de todo el clúster de RocketMQ. Supervisa los cambios de estado de los Broker, gestiona la ampliación y la reducción del clúster y realiza operaciones como el equilibrio de carga. Controller es uno de los componentes centrales del clúster de RocketMQ y garantiza su funcionamiento fiable y su gestión automatizada.
Broker(intermediario):Broker es el nodo de almacenamiento y procesamiento de mensajes de RocketMQ. Se encarga de recibir los mensajes de Producer y almacenarlos en disco. Broker también procesa las solicitudes de recuperación de mensajes de Consumer y envía los mensajes a Consumer para que los consuma. Un clúster de RocketMQ puede contener varios Broker, cada uno encargado de almacenar una parte de los datos de mensajes de los Topic.
KafkaMQ
Broker (intermediario): un Broker es un nodo de un clúster de Kafka encargado de almacenar y procesar mensajes. Cada Broker es una instancia independiente de servidor Kafka. Puede ser un servidor físico independiente, una máquina virtual o un contenedor. Un clúster de Kafka puede incluir varios Brokers, que colaboran para proporcionar una transmisión de mensajes con alta disponibilidad y gran capacidad de procesamiento.
Topic (tema): un Topic es una categoría lógica o un tema de los mensajes. Es la unidad de publicación y suscripción de mensajes. El Producer publica mensajes en el Topic especificado, mientras que el Consumer se suscribe a los Topics que le interesan para recibir mensajes. Un Topic puede considerarse un contenedor de mensajes que permite clasificar y agrupar los mensajes relacionados.
Partition (partición): un Topic puede dividirse en una o varias particiones, y cada partición es un subconjunto del Topic. La partición es la unidad mínima de almacenamiento y transmisión de mensajes. Cada partición corresponde físicamente a un archivo de registro independiente, y estas se distribuyen entre distintos Brokers. Las particiones permiten que Kafka escale horizontalmente y procese en paralelo, además de ofrecer un mayor rendimiento. Los mensajes de cada partición se almacenan y transmiten en orden de entrada, primero en entrar, primero en salir.
3、Persistencia y fiabilidad:
RabbitMQ: RabbitMQ utiliza un mecanismo de persistencia de mensajes que los guarda en disco para garantizar su fiabilidad. Admite diversos mecanismos de confirmación de mensajes y transacciones, lo que permite garantizar una entrega fiable.
RocketMQ: RocketMQ cuenta con potentes funciones de persistencia y fiabilidad, admite mecanismos de escritura síncrona en disco y replicación asíncrona, y puede ofrecer garantías de entrega de mensajes de alta fiabilidad.
Kafka:Kafka almacena los mensajes de forma persistente, escribiéndolos en archivos de registro en disco. Mediante mecanismos de particionamiento y replicación, ofrece una elevada fiabilidad y capacidad de almacenamiento persistente.
4、Rendimiento
RabbitMQ:el rendimiento de RabbitMQ suele ser relativamente bajo y resulta adecuado para aplicaciones de pequeña y mediana escala. RabbitMQ es apropiado para aplicaciones de pequeña y mediana escala y normalmente puede manejar volúmenes de decenas de miles a cientos de miles de mensajes. Se centra principalmente en la entrega fiable y la persistencia de los mensajes; para necesidades de alto rendimiento, puede requerir optimizaciones y ajustes.
RocketMQ: RocketMQ tiene un alto rendimiento y puede alcanzar una capacidad de procesamiento del orden de millones de mensajes. Destaca en escenarios de transacciones distribuidas y mensajería a gran escala.
Kafka:Kafka es un sistema de colas de mensajes conocido por su alta capacidad de procesamiento, capaz de gestionar millones de mensajes e incluso volúmenes superiores. Kafka es adecuado para escenarios que requieren un alto rendimiento, como el procesamiento de datos a gran escala, de flujos en tiempo real y de registros.
5、Tiempo de respuesta
6、Comunidad y ecosistema
RabbitMQ: RabbitMQ cuenta con un amplio ecosistema de complementos y herramientas, así como con el respaldo de una extensa comunidad de desarrolladores.
RocketMQ:RocketMQ se utiliza ampliamente en China y cuenta con el amplio ecosistema de Alibaba y el apoyo de la comunidad.
Kafka:Kafka cuenta con una comunidad de código abierto activa y un amplio ecosistema, y muchas grandes empresas lo utilizan extensamente.
Estrella de GitHub
Colaboradores de Github
En términos generales:rabbitmq<rocketmq<kafka
7、Filosofía de diseño
RabbitMQ:RabbitMQ es un middleware de mensajería de código abierto basado en AMQP (Protocolo Avanzado de Colas de Mensajes), que prioriza la facilidad de uso y la flexibilidad y admite diversos patrones de mensajería y una entrega fiable de mensajes.
RocketMQ:RocketMQ es un middleware distribuido de mensajería de código abierto de Alibaba, diseñado inicialmente para satisfacer las necesidades internas de Alibaba de procesar cantidades masivas de datos, y se caracteriza por su alto rendimiento y baja latencia. En 2016, Alibaba donó RocketMQ a la Fundación Apache Software.
Kafka:Kafka es una plataforma distribuida de procesamiento de flujos desarrollada por LinkedIn, utilizada principalmente para procesar flujos de datos en tiempo real con un alto rendimiento, almacenando y procesando los datos de forma persistente. En 2011, Kafka se convirtió en un proyecto de código abierto de Apache.
8、Modelo de datos
RabbitMQ:RabbitMQ utiliza un modelo de colas (Queue); los mensajes se envían a una cola, de la que los consumidores los reciben para procesarlos.
RocketMQ:RocketMQ utiliza un modelo de temas(Topic)y etiquetas(Tag). Los mensajes se publican en temas y los consumidores pueden suscribirse a ellos y filtrarlos según los temas y las etiquetas.
Kafka:Kafka utiliza un modelo de publicación-suscripción; los mensajes se publican en temas y varios consumidores pueden suscribirse al mismo tema y consumir los mensajes de forma independiente.
9、Herramientas de administración web
RabbitMQ
Interfaz web de administración de RabbitMQ: RabbitMQ incluye una interfaz web de administración accesible desde el navegador. Ofrece una interfaz de usuario intuitiva que permite consultar y gestionar los distintos aspectos del servidor de RabbitMQ, incluidas las colas, los intercambiadores, los enlaces y los permisos de usuario. De forma predeterminada, la interfaz web de administración se ejecuta en el puerto 15672.
RokcetMQ
RocketMQ Console:RocketMQ ofrece una consola web oficial llamada RocketMQ Console. Proporciona una interfaz visual para gestionar y supervisar los distintos aspectos de un clúster de RocketMQ, incluidos los temas (Topic), los grupos de consumidores, las consultas de mensajes y las estadísticas de rendimiento. Puedes utilizar esta herramienta accediendo a la URL de la consola.
Kafka
Kafka Manager: Kafka Manager es una herramienta de administración gráfica de código abierto desarrollada por Yahoo para gestionar clústeres de Apache Kafka. Ofrece funciones como la supervisión en tiempo real del estado del clúster, la gestión de temas y particiones y la gestión de grupos de consumidores.
10、Patrón de mensajes
Los principales modelos de transmisión de los sistemas de mensajería intermediaria son el modelo punto a punto y el modelo de publicación y suscripción. En concreto:
RabbitMQ:
Modelo de publicación-suscripción:RabbitMQ admite el modelo de publicación-suscripción, en el que los productores publican mensajes en un intercambiador(Exchange), que después los transmite a varias colas vinculadas(Binding)a él. Los consumidores pueden recibir mensajes de las colas de manera independiente.
Modo punto a punto: RabbitMQ también admite el modo punto a punto, en el que el productor envía mensajes a una cola específica y el consumidor los recibe desde esa cola. Cada mensaje solo puede ser recibido y procesado por un consumidor.
2.RocketMQ:
Modelo de publicación y suscripción: RocketMQ admite este modelo, en el que los productores envían mensajes a un tema (Topic) específico y los consumidores se suscriben a los temas que les interesan. RocketMQ admite varias modalidades de suscripción, como la difusión y los clústeres, que permiten la multidifusión de mensajes o su consumo con equilibrio de carga.
Modelo de colas: RocketMQ también admite un modelo de colas, en el que los productores envían mensajes a una cola específica y los consumidores reciben los mensajes de esa cola. Varios consumidores pueden consumir mensajes de la misma cola en paralelo.
3.Kafka:
Modelo de publicación-suscripción:Kafka utiliza un modelo de publicación-suscripción, en el que los productores publican mensajes en un tema(Topic)determinado y los consumidores se suscriben a los temas que les interesan. El modelo de suscripción de Kafka admite varios grupos de consumidores, cada uno de los cuales puede consumir los mensajes de forma independiente, lo que permite un alto rendimiento y escalabilidad horizontal.
Modelo de particionamiento:Kafka divide los temas en varias particiones, cada una de las cuales corresponde físicamente a un archivo de registro independiente. Los productores envían los mensajes a una partición determinada, y los consumidores pueden consumirlos en paralelo por partición. Este modelo permite que Kafka alcance escalabilidad horizontal y un alto rendimiento.