モバイルメッセージングアプリを開発しています。必要なテクノロジーを調べていたところ、2つのMQTTとApache Kaftaが見つかりました。私にとっては、両方とも同じように同じことをしているようです(トピックのサブスクライブと公開に関して)。
MQTTは非常に軽量であるため、モバイルに適していると聞きましたか?それで、基本的にこれら2つの違いは何ですか、お互いの利点は何ですか?
Kafka=の背後にある主な動機はスケーラビリティです。
[〜#〜] mqtt [〜#〜]は、軽量クライアント/メッセージブローカー通信用のパブリック仕様のプロトコルであり、パブリッシュ/サブスクライブ交換を可能にします。クライアントライブラリとブローカー(Mosquitto、JoramMQ ...)の複数の実装が存在し、実質的に互換性があります。 MQTTは、トランスポート、および漠然とアプリケーション部分(つまり、データの処理方法と格納方法、クライアントの認証方法など)を指定するだけです。トピックで消費されるデータがリアルタイムのみであるか、永続的である可能性がある場合、仕様は明確ではありません。仕様には、MQTTを実装するメッセージブローカーがどのように拡張/拡張できるかについては何も記載されていません。
一方、Apache Kafkaは、内部「コミットログ」に基づくメッセージブローカーです。その焦点は、大量のデータをディスクに保存し、リアルタイムまたはそれ以降の消費を可能にすることです(長い間データはまだディスク上で利用可能です)。優れたスケーラビリティ特性を備えた、複数ノードのクラスターとしてデプロイできるように設計されています。 Kafkaは独自のネットワークプロトコルを使用します。
したがって、ここでは2つの異なる点を比較しています:標準のpub/subプロトコル(複数の実装)と、特定のメッセージ保存/配布ソフトウェア、独自のプロトコルを持つ同じファミリーのvaguley。
バッチ処理を確実にするために大量のメッセージを保存する必要がある場合は、Kafkaをご覧ください。多くの独立したトピックで多くのクライアント/アプリがリアルタイムでメッセージを交換している場合は、MQTT(またはAMQP)メッセージブローカーの実装を詳しく調べてください。
MQTTは標準プロトコルです(多くの実装があります)。 Kafka(これもプロトコルです)は通常、Apache WebサイトまたはConfluent Dockerイメージからダウンロードして使用します。
リンゴとオレンジを比較するようなもので、どちらも非常に異なる理由で存在します。
IoT環境で見られるほとんどのユースケースは、MQTTとApache Kafkaの両方を組み合わせています。 EdgeデバイスはMQTTプロトコルを使用します(Edge環境での利点のため。これらはApache Kafka=に転送され、エンタープライズアーキテクチャの残りの部分にイベントを取得します。
これは、HiveMQ + Apache KafkaなどのMQTTブローカーを介して、またはMQTTプロキシーを介して(MQTTブローカーを必要としないように)どちらでも実行できます。もちろん、両方のオプションにはトレードオフがあります。 。
これを参照してください MQTTとApache Kafkaを組み合わせる方法の例 。または、Githubコードに直接移動します: " MQTT IoTセンサーデータのストリーミング異常検出のためのKSQLのディープラーニングUDF "。
また、統合方法についてのライブデモも作成しました Apache Kafka and MQTT 。