Apache Kafka

RabbitMQ contra Apache Kafka

RabbitMQ contra Apache Kafka
En esta publicación, intentaremos comparar y establecer algunas diferencias en los dos corredores de mensajes más populares, RabbitMQ y Apache Kafka.

Siempre que queramos integrar agentes de mensajes en nuestra aplicación, lo que nos permite escalar fácilmente y conectar nuestro sistema de forma asincrónica, hay muchos agentes de mensajes que pueden hacer la lista de la que está hecho para elegir uno, como:

Cada uno de estos corredores de mensajes tiene su propia lista de pros y contras, pero las opciones más desafiantes son las dos primeras, RabbitMQ y Apache Kafka. En esta lección, enumeraremos los puntos que pueden ayudar a reducir la decisión de ir con uno sobre otro. Finalmente, vale la pena señalar que ninguno de estos es mejor que otro en todos los casos de uso y depende completamente de lo que quieras lograr, por lo que no hay una respuesta correcta!

Comenzaremos con una simple introducción de estas herramientas.

Apache Kafka

Como dijimos en esta lección, Apache Kafka es un registro de confirmación distribuido, tolerante a fallas y escalable horizontalmente. Esto significa que Kafka puede realizar un término de división y regla muy bien, puede replicar sus datos para garantizar la disponibilidad y es altamente escalable en el sentido de que puede incluir nuevos servidores en tiempo de ejecución para aumentar su capacidad de administrar más mensajes.

Productor y consumidor de Kafka

RabbitMQ

RabbitMQ es un agente de mensajes de uso más general y más sencillo que, a su vez, mantiene un registro de los mensajes que ha consumido el cliente y persisten en el otro. Incluso si por alguna razón el servidor de RabbitMQ deja de funcionar, puede estar seguro de que los mensajes actualmente presentes en las colas se han almacenado en el sistema de archivos para que cuando RabbitMQ vuelva a funcionar, los consumidores puedan procesar esos mensajes de manera coherente.

RabbitMQ trabajando

Superpoder: Apache Kafka

La principal superpotencia de Kafka es que se puede usar como un sistema de cola, pero eso no es lo que se limita a. Kafka es algo más como un búfer circular que puede escalar tanto como un disco en la máquina del clúster y, por lo tanto, nos permite volver a leer los mensajes. El cliente puede hacer esto sin tener que depender del clúster de Kafka, ya que es completamente responsabilidad del cliente anotar los metadatos del mensaje que está leyendo actualmente y puede volver a visitar Kafka más tarde en un intervalo específico para leer el mismo mensaje nuevamente.

Tenga en cuenta que el tiempo en el que se puede volver a leer este mensaje es limitado y se puede configurar en la configuración de Kafka. Por lo tanto, una vez que termina ese tiempo, no hay forma de que un cliente pueda leer un mensaje más antiguo nunca más.

Superpoder: RabbitMQ

La principal superpotencia de RabbitMQ es que es simplemente escalable, es un sistema de colas de alto rendimiento que tiene reglas de coherencia muy bien definidas y la capacidad de crear muchos tipos de modelos de intercambio de mensajes. Por ejemplo, hay tres tipos de intercambio que puede crear en RabbitMQ:

  1. Intercambio directo: intercambio de tema uno a uno
  2. Intercambio de temas: A tema Se define en que varios productores pueden publicar un mensaje y varios consumidores pueden comprometerse a escuchar sobre ese tema, para que cada uno de ellos reciba el mensaje que se envía a este tema.
  3. Intercambio de fanout: esto es más estricto que el intercambio de temas, ya que cuando se publica un mensaje en un intercambio de fanout, todos los consumidores que están conectados a las colas que se vinculan al intercambio de fanout recibirán el mensaje.

Ya noté la diferencia entre RabbitMQ y Kafka? La diferencia es que, si un consumidor no está conectado a un intercambio de distribución en RabbitMQ cuando se publicó un mensaje, se perderá porque otros consumidores han consumido el mensaje, pero esto no sucede en Apache Kafka, ya que cualquier consumidor puede leer cualquier mensaje. como mantienen su propio cursor.

RabbitMQ está centrado en el corredor

Un buen corredor es alguien que garantiza el trabajo que asume y eso es en lo que RabbitMQ es bueno. Está inclinado hacia garantías de entrega entre productores y consumidores, con mensajes transitorios preferidos a duraderos.

RabbitMQ utiliza el propio intermediario para administrar el estado de un mensaje y asegurarse de que cada mensaje se entregue a cada consumidor autorizado.

RabbitMQ supone que los consumidores están en su mayoría en línea.

Kafka se centra en el productor

Apache Kafka está centrado en el productor, ya que se basa completamente en la partición y un flujo de paquetes de eventos que contienen datos y los transforma en agentes de mensajes duraderos con cursores, que admiten consumidores por lotes que pueden estar fuera de línea o consumidores en línea que desean mensajes con baja latencia.

Kafka se asegura de que el mensaje permanezca seguro hasta un período de tiempo específico replicando el mensaje en sus nodos en el clúster y manteniendo un estado consistente.

Entonces, Kafka no suponga que cualquiera de sus consumidores está mayoritariamente en línea y que no le importa.

Orden de mensajes

Con RabbitMQ, el pedido de la publicación se gestiona de forma coherente y los consumidores recibirán el mensaje en el mismo orden publicado. Por otro lado, Kafka no lo hace, ya que presume que los mensajes publicados son pesados ​​por naturaleza, por lo que los consumidores son lentos y pueden enviar mensajes en cualquier orden, por lo que tampoco administra el pedido por sí solo. Sin embargo, podemos configurar una topología similar para administrar el pedido en Kafka usando el intercambio de hash consistente o complemento de fragmentación., o incluso más tipos de topologías.

La tarea completa administrada por Apache Kafka es actuar como un "amortiguador" entre el flujo continuo de eventos y los consumidores, de los cuales algunos están en línea y otros pueden estar fuera de línea, consumiendo solo lotes por horas o incluso a diario.

Conclusión

En esta lección, estudiamos las principales diferencias (y similitudes también) entre Apache Kafka y RabbitMQ. En algunos entornos, ambos han mostrado un rendimiento extraordinario, como RabbitMQ consume millones de mensajes por segundo y Kafka ha consumido varios millones de mensajes por segundo. La principal diferencia arquitectónica es que RabbitMQ administra sus mensajes casi en la memoria y, por lo tanto, usa un gran clúster (más de 30 nodos), mientras que Kafka en realidad hace uso de los poderes de las operaciones de E / S de disco secuenciales y requiere menos hardware.

Nuevamente, el uso de cada uno de ellos aún depende completamente del caso de uso en una aplicación. Mensajes felices !

Puertos de código abierto de motores de juegos comerciales
Las recreaciones gratuitas, de código abierto y de motores de juegos multiplataforma se pueden usar para jugar títulos de juegos antiguos y también al...
Los mejores juegos de línea de comandos para Linux
La línea de comandos no es solo su mayor aliado cuando usa Linux, también puede ser la fuente de entretenimiento porque puede usarla para jugar muchos...
Las mejores aplicaciones de mapeo de gamepad para Linux
Si te gusta jugar juegos en Linux con un gamepad en lugar de un sistema de entrada de teclado y mouse típico, hay algunas aplicaciones útiles para ti....