kafka architecture rabbitmq scalability apache-kafka mqtt

architecture - kafka - rabbitmq vs activemq



utilizando el protocolo mqtt con kafka como intermediario de mensajes (5)

¿Cómo podemos usar el protocolo mqtt con kafka como intermediario de mensajes?

Los clientes (aplicaciones android / ios / desktop java, etc.) producirán y consumirán mensajes utilizando las bibliotecas del lado del cliente mqtt phao, que están disponibles en diferentes idiomas utilizando kafka como intermediario de mensajes.

¿Algún consejo?


Puede usar un conector de fuente de Kafka que transmitirá datos de un intermediario de MQTT como Mosquitto a un clúster de Kafka. Ver https://github.com/evokly/kafka-connect-mqtt

La forma más sencilla de ejecutar el conector es en modo independiente, donde se ejecutará una sola instancia en el clúster de Kafka en un solo nodo. También puede ejecutarlo en modo distribuido (aunque con mucha más configuración) y esto distribuirá el conector a través del clúster para obtener un mayor rendimiento. En el modo distribuido, puede diseñar una topología que permita la escala horizontal, el rendimiento paralelo y la alta disponibilidad. La implementación de garantías adicionales requiere equilibradores de carga adicionales, múltiples corredores de MQTT y escenarios de testamentos y últimas voluntades para lidiar con el bloqueo de conectores, pero esto probablemente esté fuera del alcance de esta pregunta.

El uso del enfoque de conector tiene la ventaja del clúster de Kafka, asegurándose de que el conector esté activo y reiniciándolo si es necesario. El modo distribuido ofrece aún más ventajas.


Esta no es una buena idea Un cliente MQTT generalmente es muy liviano con recursos limitados. Esos dispositivos o IoT tienen poca memoria / potencia de CPU. Un cliente de Kafka generalmente es pesado. Por ejemplo, el cliente de Kafka debe realizar un seguimiento del desplazamiento. También requiere interacción con los cuidadores del zoológico. En resumen, Kafka no es adecuado como corredor de MQTT. Es mejor elegir un corredor MQTT popular como Mosquito.


AFAIK, no hay un conector MQTT "oficial" para Kafka. Pero puedes usar el puente MQTT-Kafka. Para obtener más información, consulte https://github.com/km4rcus/mqttKafkaBridge (Tenga en cuenta que hay un error en esta implementación: los temas de kafka no pueden contener "/", por lo que probablemente desee reemplazarlos por "_" en el mensaje). archivo .java)

Tenga en cuenta que este código es solo una solución muy simple, no escalable. Es una buena idea, probablemente, escribir su implementación personalizada para satisfacer mejor sus expectativas. Pero debe mantenerlo lo más simple posible: es un punto único de falla. Mientras obtenga sus datos en Kafka, obtendrá algunas garantías, pero no obtendrá garantías del agente de MQTT. Cuando el puente se bloquea, simplemente estás perdiendo tus datos ...


Como menciona @Miroslav Prymek, no hay un puente oficial. El ha sido creado por Jacklund. Actualicé el puente para admitir Kafka v 0.8.1.1. También contiene un binario precompilado compatible con JRE 1.7. Aquí está el enlace al puente MQTT Kafka .


Puede usar Mosca , un adaptador mqtt escrito en javascript.

Mosca es un intermediario node.js mqtt, que se puede usar de forma independiente o incrustado en otra aplicación Node.js

Mosca admite diferentes backends como redis y mongodb, pero también kafka. En los ejemplos de Mosca se incluye una aplicación Kafka MQTT Bridge.

Este artículo en linkedin describe la solución más completamente.

Descargo de responsabilidad: soy colaborador de la aplicación de ejemplo Mosca Kafka Bridge.