WHITE PAPER
Driving the Future of Connected Cars with MQTT →

EMQX vs Mosquitto|2023年MQTTブローカーの比較

Fan Wang
Jun 7, 2023
EMQX vs Mosquitto|2023年MQTTブローカーの比較

はじめに

MQTT(Message Queuing Telemetry Transport)は、IoT(Internet of Things)のデファクトスタンダードなメッセージングプロトコルである。IoTの発展に伴い、MQTTブローカーはIoT機器の接続や、接続された機器とクラウドサービス間のデータ移動に不可欠になっています。

EMQXMosquittoは、最も人気のあるオープンソースのMQTTブローカーの2つです。EMQXは、拡張性の高い分散型MQTTブローカーで、クラスタリングをサポートしています。Mosquittoは、フットプリントが小さく、シングルスレッド・アーキテクチャの軽量なMQTTブローカーです。

このブログ記事では、2023年の2つのブローカーを詳細に比較します。

Mosquittoの概要

Mosquittoプロジェクトは、2009年にRoger Lightによって最初に開発され、その後Eclipse Foundationに寄贈され、Eclipse Public License(EPL/EDLライセンス)の下でライセンスされています。世界で最も広く使われているMQTTブローカーの1つとして、Mosquittoは2023年3月現在で7k以上のGitHubスターを持っています。

MosquittoはC/C++で書かれており、シングルスレッド・アーキテクチャを使用しています。MosquittoはMQTTプロトコルバージョン5.0、3.1.1、3.1を実装し、SSL/TLSとWebSocketをサポートしています。軽量設計のため、Mosquittoは組み込み機器やリソースの限られたサーバーへの導入に適しています。

Mosquitto

長所です:

  • 簡単な設定と使用方法
  • MQTT 5.0プロトコル対応
  • 軽量で効率的
  • 積極的なコミュニティサポート

    Cons:

  • 拡張性が低い(10万人未満)

  • クラスタリングサポートなし
  • エンタープライズ向け機能を欠く
  • Cloud-Nativeのサポートは限定的です。

EMQXの概要

EMQXプロジェクトは2012年にGitHubで開始され、Apacheバージョン2.0の下でライセンスされています。EMQXは現在、MQTT 5.0、MQTT-SN、MQTT over QUICなどの先進機能をサポートする、世界で最もスケーラブルなMQTTメッセージングサーバーです。IoT、産業用IoT(IIoT)、車両インターネット(IoV)のビジネスクリティカルなアプリケーションで広く利用されています。

EMQXは、大規模スケーラブルなソフトリアルタイムシステムを構築するためのプログラミング言語であるErlang/OTPで書かれています。EMQXは、Mosquittoとは異なり、設立当初からマスターレス分散アーキテクチャを採用し、高可用性と水平スケーラビリティを実現しています。最新版のEMQX 5.0では、23ノードの単一クラスターで1億の同時MQTT接続を確立する規模となっています。

ご覧ください:EMQX 5.0による100M MQTT接続の達成

EMQX

長所です:

  • 大規模なデプロイメントに対応
  • 高可用性
  • 水平方向のスケーラビリティ
  • 高性能・高信頼性
  • 豊富なエンタープライズ機能
  • MQTT over QUICの先駆け。

    Cons:

  • 設定や構成が複雑

  • 効果的なマネジメントが難しい
  • ログが乱れる場合があります

コミュニティとポピュラリティ

EMQXはGitHubで最も評価が高く、最もアクティブなMQTT Brokerプロジェクトで、過去12ヶ月で11.4スター、3,000以上のコミットが行われています。

Mosquittoは、軽量なシングルスレッドアーキテクチャを持つEMQXよりも、特にリソースの限られた組込み機器での導入が進んでいるようです。

EMQX Mosquitto
GitHub Project EMQX GitHub Mosquitto GitHub
Project Created 2012 2009
License Apache License 2.0 EPL/EDL License
Programming Language Erlang C
Latest Release v5.0.21 (March 2023) 2.0.15 (Aug 2022)
GitHub Stars 11.4k 7.2 k
GitHub Forks 2k 2.1k
GitHub Commits 14k+ 2.8k+
GitHub Commits (Last 12 Months) 3000+ 500+
GitHub Issues 3500+ 2200+
GitHub Releases 260+ 60+
GitHub PRs 6000+ 600
GitHub Contributors 100+ 110+

コミュニティと人気者(2023年3月24日)

スケーラビリティとパフォーマンス

Mosquittoは軽量なMQTTブローカーとして、クラスタリングアーキテクチャをサポートしませんが、シングルノードのパフォーマンスは優れています。小さなリソースフットプリントのサーバーで、100kを超える同時MQTT接続をサポートすることができます。

EMQXは、拡張性の高い分散型MQTTメッセージングブローカーとして、単一ノードで数百万、単一クラスタで1億の同時接続をサポートできますが、CPUとメモリの使用量ははるかに高くなります。

ご覧ください:EMQX vs Mosquitto パフォーマンスベンチマークレポートをご覧ください。

EMQX Mosquitto 参考リンク
スケーラビリティ 1ノードあたり4M MQTTコネクション
1クラスタあたり100M MQTTコネクション
<1ノードあたり160K MQTT接続数 EMQX 5.0による100M MQTT接続の達成
パフォーマンス ノードあたり200万QoS0 MQTT msgs/sec
800k QoS1 msg/秒
200k QoS2 msg/秒
ノードあたり最大120k QoS0 MQTT msg/秒
80k QoS1 msg/秒
60k QoS2 msg/秒
レイテンシー 1桁ミリ秒のレイテンシーをスケールアップで実現 シナリオによっては最大数秒のレイテンシーが発生します。
クラスター化 20ノード以上のクラスタ クラスターのスケーラビリティ
スケーリング
オートクラスタリング EMQX ノードの発見とオートクラスター
ダウンタイムゼロ/ホットアップグレード リリースアップグレード

MQTTとコネクティビティ

Mosiquittoは、MQTTプロトコルバージョン3.1/3.1/5.0を実装し、意志メッセージ、保持メッセージ、共有サブスクリプションなどのプロトコル仕様をサポートし、MQTT over WebSocketをサポートします。

EMQXは、MQTT 3.1/3.1/5.0とMQTT over Websocketプロトコルを完全にサポートしています。EMQX 5.0では、MQTT Over QUICの画期的なサポートも導入しています。多重化、接続確立と移行の高速化により、次世代のMQTT標準となる可能性を秘めています。

さらにEMQXは、MQTT-SN、CoAP、LwM2M、STOMPといった複数のプロトコルゲートウェイをサポートするように拡張することができます。

EMQX Mosquitto 参考リンク
MQTT 3.1/3.1.1 MQTTプロトコルのわかりやすい解説書
MQTT 5.0 MQTT 5 エクスプロア
MQTT Shared Subscription
MQTT Add-ons 独占配信
ディレイパブリッシュ
オートサブスクリプション
トピックのリライト
MQTT over TCP EMQX入門編
MQTT over TLS EMQX MQTTブローカーのSSL/TLSを有効化する。
MQTT over WebSocket WebsocketでMQTTブローカーに接続する。
MQTT over QUIC EMQXは現在、世界で唯一、QUICトランスポートをサポートするMQTTブローカーです。( MQTT over QUIC)
LB (Proxy Protocol) Proxy Protocol v1、v2(クラスターロードバランサー
IPv6 Support
Multi-protocol Gateway Extended protocol gateway
MQTT-SN MQTT-SN gateway
CoAP CoAP protocol gateway
LwM2M LwM2M protocol gateway
STOMP STOMP Gateway

セキュリティ

IoTデバイスの接続や、接続されたデバイスとクラウドサービス間でやり取りされるデータには、セキュリティが重要です。MosquittoとEMQXはともに、TLS/SSLに基づくセキュアな接続をサポートしています。さらにEMQXは、QUICトランスポート、OCSPステープリング、監査ログ、Black Duckによるソースコードスキャンをサポートしています。

EMQX Mosquitto 参考リンク
TLS/SSL EMQX: TLS 1.1, 1.2, 1.3 ( EMQX MQTT ブローカーの SSL/TLS を有効にする )
QUIC MQTT over QUIC:次世代IoT標準プロトコル
OCSP Stapling EMQX OCSPステープリング対応
Audit ログ

認証と認可

MQTTクライアントの認証やアクセス制御については、Mosiquittoが提供するダイナミックセキュリティプラグインにより、ユーザー名/パスワードによる認証やアクセス制御を柔軟に対応することができます。

EMQXには、ユーザー名-パスワード認証、JWT認証、MQTT 5.0プロトコルに基づく拡張認証など、複数の認証メカニズムに対するサポートが組み込まれています。EMQXの認証は、ファイル、Redis、MySQL、PostgreSQL、MongoDBなど、さまざまなデータバックエンドと統合されています。

また、EMQXはフラッピング検知やブロックリスト機能を備えており、DashboardやHTTP APIを介して、IPアドレス、clientId、ユーザー名をブロックリストに追加することで、特定のクライアントをブロックすることが可能です。

EMQX Mosquitto 参考リンク
ユーザー名/パスワード EMQX:AuthN の紹介
Mosquitto:認証方法について
JWT EMQX: JWT認証システム
Mosquitto: mosquittoのAuthプラグイン
MQTT 5.0 認証の強化 SCRAM認証
PSK SSL/TLS
X.509証明書
LDAP LDAP認証/ACL
きめ細かなアクセスコントロール EMQXのオーソライズ
認証用バックエンド 認証の紹介
ACLデータベースバックエンド EMQX:ファイル、MySQL、PostgreSQL、MongoDB、組込みデータベース、HTTP EMQX認証の紹介
フラッピングディテクト
ブロックリスト

データインテグレーション

軽量ブローカーであるMosquittoは、データ統合をサポートしません。ユーザーは、MosquittoからMQTTメッセージを消費して、外部のデータベースやクラウドサービスに取り込むためのコードを書くことができます。

EMQXにはSQLベースのルールエンジンが組み込まれており、ブローカー内でリアルタイムにMQTTメッセージを抽出、フィルタリング、エンリッチ、変換するのに役立ちます。

EMQXのEnterprise Editionは、ルールエンジンとすぐに使えるデータブリッジを使って、Kafka、データベース、クラウドサービスとシームレスに統合することができます。

EMQX Mosquitto 参考リンク
Webhook Webhook
Rule Engine Rule Engine
Message Codec
Data Bridge Data bridges
Confluent/Kafka ✅ (Enterprise Edition) Stream Data into Kafka
SAP Event Mesh ✅(Enterprise Edition) Ingest Data into SAP Event Mesh
Apache Pulsar ✅(Enterprise Edition) Ingest Data into Pulsar
RabbitMQ ✅(Enterprise Edition) Ingest Data into RabbitMQ
MySQL ✅(Enterprise Edition) Ingest Data into MySQL
PostgreSQL ✅(Enterprise Edition) Ingest Data into PostgreSQL
SQL Server ✅(Enterprise Edition) Ingest Data into SQL Server
MongoDB ✅(Enterprise Edition) Ingest Data into MongoDB
Redis ✅(Enterprise Edition) Ingest Data into Redis
Cassandra ✅(Enterprise Edition) Ingest Data into Cassandra
AWS DynamoDB ✅(Enterprise Edition) Ingest Data into DynamoDB
ClickHouse ✅(Enterprise Edition) Ingest Data into ClickHouse
InfluxDB ✅(Enterprise Edition) Ingest Data into InfluxDB
TimeScaleDB ✅(Enterprise Edition) Ingest Data into TimescaleDB
Oracle ✅(Enterprise Edition) Ingest Data into Oracle

操作性・観察性

Mosquittoは、ブローカーの状態を監視し、問題のトラブルシューティングを行うための基本的なロギングとデバッグ機能を備えています。しかし、高度な管理・監視機能がないため、実行中の状態を把握し、パフォーマンスを最適化することが困難です。

EMQXは、HTTP APIとDashboardを通じて、リッチでビジュアルな監視機能を提供し、監視と管理を容易にする。また、EMQXはPrometheusやDatadogとの連携をサポートしており、O&Mチームはサードパーティの監視プラットフォームを容易に利用することができます。

EMQX Mosquitto 参考リンク
Dashboard EMQXダッシュボード
Configuration HOCONフォーマット Key-Value Fomat
HTTP API EMQX REST API
CLI コマンドラインインターフェイス
Config Hot update コンフィギュレーションファイル
Metrics ノードのメトリクス: Metrics
Mosquitto - $SYS topic
Grafana Prometheusとの連携
Cluster Metrics メトリックス
アラームアラート システムトピック
サブスクリプションの監視が遅い 加入者数の統計が遅い
Prometheus Prometheusとの連携

クラウドネイティブとKubernetes

EMQXとMosquittoは、どちらもDockerベースのコンテナ型デプロイメントをサポートしています。EMQXはKubernetes OperatorやTerraformのサポートに優れており、パブリッククラウドプラットフォームへのデプロイや運用が容易になります。

また、EMQXは、世界中のAWS、Google Cloud、Microsoft Azureの17以上のリージョンで、Serverless専用BYOCのMQTTメッセージングサービスを提供しています。

EMQX Mosquitto 参考リンク
Docker EMQX Docker
Kubernetes Operator EMQX Kubernetes Operator
Terraform EMQX Terraform
Cloud Service ServerlessHosting/専用BYOC Hosting

EMQX Kubernetes Operator: https://github.com/emqx/emqx-operator

EMQX Kubernetes Operator

MosquittoからEMQXへのブリッジ接続

EMQXとMosquittoは全く異なるMQTTブローカーですが、MQTTブリッジングアプローチで完全に動作させることができます。

IoTエッジの組み込みハードウェアやゲートウェイにMosquittoを導入し、MQTTブリッジを介してクラウド上の大規模EMQXクラスタにIoTデータを集約・インジェストすることができます。

Mosquitto MQTTメッセージのEMQXへの橋渡し」を参照してください。

Bridging Mosquitto to EMQX

まとめ

上記の比較から、EMQXとMosquittoは、異なるニーズやユースケースに対応する人気のMQTTブローカーであることがわかります。

Mosquittoは、シングルスレッドで軽量なMQTT Brokerとして、IoTエッジのための組み込みハードウェア、産業用ゲートウェイ、小型サーバーへの導入に適しています。

EMQXは、高可用性と水平方向のスケーラビリティをサポートする、拡張性の高い分散型MQTTサーバーです。クラウド展開、大規模なIoT、IIoT、コネクテッドカーなどのアプリケーションにより適しています。

つまり、組み込みハードウェアやIoTエッジのデプロイメントにはMosquittoを選び、クラウドではEMQXを大規模スケーラブルで高可用性のMQTTメッセージングサービスとして利用することができます。

参考文献

無料トライアルEMQX Cloud
IoT向けフルマネージド型MQTTサービス
無料トライアル →

おすすめ閲読

May 26, 2023Zaiming (Stone) Shi
IoTの未来を開く:2023年のMQTT技術動向7選

2023年に向けて、IoTにおけるMQTTの利用は、新興技術の進展に後押しされて、驚異的かつ多様に拡大していることから、MQTT技術に関する7つの発展的トレンドを予想することができます。