uso - rabbitmq python
¿Hay alguna razón para usar RabbitMQ sobre Kafka? (9)
Me pidieron que evaluara RabbitMQ en lugar de Kafka, pero me resultó difícil encontrar una razón por la que está haciendo algo mejor que Kafka. ¿Alguien sabe si es realmente mejor en rendimiento, durabilidad, latencia o facilidad de uso?
El único beneficio que se me ocurre es la función Transaccional, el resto se puede hacer usando Kafka
Escalar ambos es difícil de una manera tolerante a fallas distribuidas, pero diría que es mucho más difícil a gran escala con RabbitMQ. No es trivial comprender Shovel, Federation, Mirrored Msg Queues, ACK, problemas con Mem, tolerancia a fallas, etc. Sin decir que no tendrá problemas específicos con Zookeeper, etc. en Kafka, pero hay menos partes móviles que manejar. Dicho esto, obtienes un intercambio Polyglot con RMQ que no con Kafka. Si quieres transmitir, usa Kafka. Si desea IoT simple o entrega de paquetes de alto volumen similar, use Kafka. Se trata de consumidores inteligentes. Si desea flexibilidad de msg y mayor confiabilidad con costos más altos y posiblemente algo de complejidad, use RMQ.
Escucho esta pregunta todas las semanas ... Mientras que RabbitMQ (como IBM MQ o JMS u otras soluciones de mensajería en general) se usa para la mensajería tradicional, Apache Kafka se usa como plataforma de transmisión (mensajería + almacenamiento distribuido + procesamiento de datos). Ambos están diseñados para diferentes casos de uso.
Puede usar Kafka para "mensajes tradicionales", pero no usar MQ para escenarios específicos de Kafka.
El artículo “ Apache Kafka vs. Enterprise Service Bus (ESB): ¿amigos, enemigos o enemigos? ( https://www.confluent.io/blog/apache-kafka-vs-enterprise-service-bus-esb-friends-enemies-or-frenemies/ ) "explica por qué Kafka no es competitivo sino complementario a las soluciones de integración y mensajería (incluido RabbitMQ) y cómo integrar ambos.
Proporcionaré una respuesta objetiva basada en mi experiencia con ambos, también omitiré la teoría detrás de ellos, asumiendo que ya lo sabes y / u otras respuestas ya han proporcionado suficiente.
RabbitMQ : elegiría este si mis requisitos son lo suficientemente simples como para manejar la comunicación del sistema a través de canales / colas, la retención y la transmisión no es un requisito. Por ejemplo, cuando el sistema de fabricación construyó el activo, sí notifica al sistema de acuerdo que configure los contratos, etc.
Kafka : Requisito de abastecimiento de eventos principalmente, cuando es posible que deba lidiar con transmisiones (a veces infinitas), una gran cantidad de datos a la vez correctamente equilibrados, compensaciones de reproducción para garantizar un estado determinado, etc. Tenga en cuenta que esta arquitectura también aporta más complejidad, ya que incluye conceptos como temas / particiones / intermediarios / mensajes de lápidas, etc. como una importancia de primera clase.
RabbitMQ es un agente de mensajes sólido y de propósito general que admite varios protocolos como AMQP, MQTT, STOMP, etc. Puede manejar casos de uso común y de alto rendimiento para manejar trabajos en segundo plano o como agente de mensajes entre microservicios. Kafka es un bus de mensajes optimizado para flujos de datos de alta entrada y reproducción.
Kafka puede ser visto como un agente de mensajes duradero donde las aplicaciones pueden procesar y reprocesar datos transmitidos en el disco. Kafka tiene un enfoque de enrutamiento muy simple. RabbitMQ tiene una mejor opción si necesita enrutar sus mensajes de manera compleja a sus consumidores. Use Kafka si necesita apoyar a los consumidores por lotes que podrían estar fuera de línea, o los consumidores que desean mensajes con baja latencia.
RabbitMQ mantendrá todos los estados sobre mensajes consumidos / reconocidos / no reconocidos, mientras que Kafka no, supone que el consumidor realiza un seguimiento de lo que se ha consumido y no. Las colas de RabbitMQ son más rápidas cuando están vacías, mientras que Kafka retiene grandes cantidades de datos con muy poca sobrecarga: Kafka está diseñada para contener y distribuir grandes volúmenes de mensajes. (Si planea tener colas muy largas en RabbitMQ, puede echar un vistazo a las colas diferidas ).
Kafka está construido desde cero con una escala horizontal (escala agregando más máquinas) en mente, mientras que RabbitMQ está diseñado principalmente para escala vertical (escala agregando más potencia).
RabbitMQ tiene una interfaz fácil de usar que le permite monitorear y manejar su servidor RabbitMQ desde un navegador web. Entre otras cosas, se pueden manejar colas, conexiones, canales, intercambios, usuarios y permisos de usuario: creados, eliminados y enumerados en el navegador, y puede monitorear las tasas de mensajes y enviar / recibir mensajes manualmente. El administrador de Kafka aún no está tan desarrollado como la interfaz de administración RabbitMQ. Diría que es más fácil / más rápido obtener una buena comprensión de RabbitMQ.
Puede encontrar más lecturas y algunos datos de comparación aquí: https://www.cloudkarafka.com/blog/2016-12-05-apachekafka-vs-rabbitmq.html
También se recomienda el documento de la industria: "Kafka versus RabbitMQ: un estudio comparativo de dos implementaciones de publicación / suscripción de referencia de la industria": http://dl.acm.org/citation.cfm?id=3093908
Trabajo en una empresa que ofrece tanto Apache Kafka como RabbitMQ como servicio.
Sé que es un poco tarde y tal vez ya lo dijiste indirectamente, pero nuevamente, Kafka no es una cola, es un registro (como alguien dijo anteriormente, basado en encuestas).
Para simplificarlo, el caso de uso más obvio cuando debería preferir RabbitMQ (o cualquier cola techno) sobre Kafka es el siguiente:
Tiene varios consumidores consumiendo de una cola y cada vez que hay un nuevo mensaje en la cola y un consumidor disponible, desea que se procese este mensaje. Si observa de cerca cómo funciona Kafka, notará que no sabe cómo hacerlo, debido a la escala de la partición, tendrá un consumidor dedicado a una partición y tendrá un problema de inanición. Problema que se evita fácilmente mediante el uso de tecno de cola simple. Puede pensar en usar un hilo que despache los diferentes mensajes de la misma partición, pero nuevamente, Kafka no tiene ningún mecanismo de reconocimiento selectivo.
Lo máximo que puedes hacer es hacerlo como esos chicos e intentar transformar Kafka como una cola: https://github.com/softwaremill/kmq
Yannick
Una diferencia crítica que ustedes olvidaron es que RabbitMQ es un sistema de mensajería basado en inserción, mientras que Kafka es un sistema de mensajería basado en extracción. Esto es importante en el escenario en el que el sistema de mensajería tiene que satisfacer a diferentes tipos de consumidores con diferentes capacidades de procesamiento. Con el sistema basado en Pull, el consumidor puede consumir en función de su capacidad, donde los sistemas push enviarán los mensajes independientemente del estado del consumidor, poniendo así al consumidor en alto riesgo.
5 Grandes diferencias entre Kafka y RabbitMQ, cliente que los está utilizando:
¿Qué sistema de mensajería elegir o debemos cambiar nuestro sistema de mensajería existente?
No hay una sola respuesta a la pregunta anterior. Un posible enfoque para revisar cuando tiene que decidir qué sistema de mensajería o si debe cambiar el sistema existente es " Evaluar el alcance y el costo"
RabbitMQ es un agente de mensajes tradicional de uso general. Permite a los servidores web responder rápidamente a las solicitudes y entregar mensajes a múltiples servicios. Los editores pueden publicar mensajes y ponerlos a disposición de las colas, para que los consumidores puedan recuperarlos. La comunicación puede ser asíncrona o síncrona.
Por otro lado, Apache Kafka no es solo un agente de mensajes. Inicialmente fue diseñado e implementado por LinkedIn para servir como una cola de mensajes. Desde 2011, Kafka ha sido de código abierto y evolucionó rápidamente en una plataforma de transmisión distribuida, que se utiliza para la implementación de canalizaciones de datos en tiempo real y aplicaciones de transmisión.
Es horizontalmente escalable, tolerante a fallas, rápido rápido y funciona en producción en miles de empresas.
Las organizaciones modernas tienen varias canalizaciones de datos que facilitan la comunicación entre sistemas o servicios. Las cosas se vuelven un poco más complicadas cuando un número razonable de servicios necesita comunicarse entre sí en tiempo real.
La arquitectura se vuelve compleja ya que se requieren varias integraciones para permitir la comunicación entre estos servicios. Más precisamente, para una arquitectura que abarque m servicios de origen yn destino, se deben escribir nxm integraciones distintas. Además, cada integración viene con una especificación diferente, lo que significa que uno puede requerir un protocolo diferente (HTTP, TCP, JDBC, etc.) o una representación de datos diferente (Binario, Apache Avro, JSON, etc.), lo que hace que las cosas sean aún más desafiantes . Además, los servicios de origen podrían abordar el aumento de la carga de las conexiones que podrían afectar la latencia.
Apache Kafka conduce a arquitecturas más simples y manejables, al desacoplar las tuberías de datos. Kafka actúa como un sistema distribuido de alto rendimiento donde los servicios de origen envían flujos de datos, haciéndolos disponibles para los servicios de destino para extraerlos en tiempo real.
Además, muchas interfaces de usuario de código abierto y de nivel empresarial para administrar Kafka Clusters están disponibles ahora. Para obtener más detalles, consulte mis artículos Descripción general de las herramientas de monitoreo de la interfaz de usuario para los clústeres de Apache Kafka y ¿Por qué Apache Kafka?
La decisión de elegir RabbitMQ o Kafka depende de los requisitos de su proyecto. En general, si desea un intermediario de mensajes pub / sub simple / tradicional, elija RabbitMQ. Si desea construir una arquitectura basada en eventos sobre la cual su organización actuará en eventos en tiempo real, entonces elija Apache Kafka ya que proporciona más funcionalidad para este tipo de arquitectura (por ejemplo, Kafka Streams y / o KSQL) .