Je développe une application de messagerie mobile. Je passais par la technologie nécessaire et j'ai trouvé deux MQTT et Apache Kafta. Pour moi, les deux semblent faire la même chose de la même manière (en termes d'abonnement et de publication à un sujet).
J'ai entendu dire que le MQTT est adapté aux mobiles car il est très léger? Donc, fondamentalement, quelle est la différence entre ces deux et quels sont les avantages l'un de l'autre?
Le motif principal derrière Kafka est l'évolutivité.
MQTT est un protocole avec des spécifications publiques pour les communications client/courtier de messages léger, permettant des échanges de publication/abonnement. Plusieurs implémentations de bibliothèques clientes et de courtiers (Mosquitto, JoramMQ ...) existent et sont pratiquement compatibles. MQTT spécifie simplement le transport, et vaguement la partie application (c'est-à-dire comment les données sont traitées et éventuellement stockées, comment les clients sont autorisés ...). La spécification n'est pas claire si les données consommées sur un sujet sont uniquement en temps réel ou éventuellement persistantes. La spécification n'indique rien sur la façon dont le courtier de messages implémentant MQTT pourrait/devrait évoluer.
D'autre part, Apache Kafka est un courtier de messages basé sur un "journal de validation" interne: son objectif est de stocker d'énormes quantités de données sur le disque et de permettre la consommation en temps réel ou plus tard (aussi longtemps car les données sont toujours disponibles sur le disque). Il est conçu pour être déployable en tant que cluster de plusieurs nœuds, avec de bonnes propriétés d'évolutivité. Kafka utilise son propre protocole réseau.
Vous comparez donc deux choses différentes ici: un protocole pub/sub standard (avec plusieurs implémentations), et un logiciel spécifique de stockage/distribution de messages, vagabey de la même famille avec son propre protocole.
Je dirais que si vous avez besoin de stocker une quantité massive de messages, pour assurer un traitement par lots, regardez davantage Kafka. Si vous avez beaucoup de clients/applications échangeant des messages en temps réel sur de nombreux sujets indépendants, regardez davantage les implémentations du courtier de messages MQTT (ou même AMQP).
MQTT est un protocole standard (avec de nombreuses implémentations). Kafka (qui est également un protocole) est normalement utilisé en le téléchargeant depuis le site Web Apache ou par exemple une image Confluent Docker.
C'est comme comparer des pommes et des oranges, les deux existent pour des raisons très différentes.
La plupart des cas d'utilisation que je vois dans les environnements IoT combinent à la fois MQTT et Apache Kafka. Les périphériques Edge utilisent le protocole MQTT (pour les avantages qu'il présente dans les environnements Edge. Ils sont ensuite transmis à Apache Kafka pour intégrer les événements dans le reste de l'architecture d'entreprise).
Vous pouvez le faire soit via un courtier MQTT comme HiveMQ + Apache Kafka ou via un proxy MQTT (afin que vous n'ayez pas besoin du courtier MQTT). Les deux options ont bien sûr des compromis .
Voir ceci exemple de la façon de combiner MQTT avec Apache Kafka . Ou accédez directement au code Github: " Deep Learning UDF pour KSQL pour la détection des anomalies de streaming des données de capteur MQTT IoT ".
J'ai également créé une démo en direct sur la façon d'intégrer Apache Kafka et MQTT .