IoT・エッジ

MQTT えむきゅーてぃーてぃー

IoTパブリッシュ/サブスクライブブローカー軽量プロトコルセンサー通信メッセージキュー
MQTTについて教えて

簡単に言うとこんな感じ!

IoTセンサーみたいな「小さくて電池で動く機器」がインターネットにメッセージを送るための、超軽量な通信ルールだよ。「掲示板に投稿したら、登録してる人全員に届く」仕組みで、工場の機械や家電の状態をリアルタイムに共有できるんだ!


MQTTとは

MQTT(Message Queuing Telemetry Transport) は、IoT(モノのインターネット)デバイス向けに設計された、非常に軽量なメッセージングプロトコル(通信のルール)です。TCP/IPネットワーク上で動作し、通信に必要なデータ量(オーバーヘッド)を極限まで削ったことが最大の特徴です。

もともとは1999年にIBMとArcomが石油パイプラインの遠隔監視用に開発しました。衛星回線のような低速・不安定な回線でも確実にセンサーデータを届けるため、プロトコルの”頭でっかち”な部分(ヘッダ情報など)を徹底的に削ぎ落としています。その結果、最小パケットサイズはわずか 2バイト という驚異の軽さを実現しています。

現在では工場の生産ライン監視、スマートホームの家電制御、自動車のコネクテッドサービスなど、電池駆動・低スペック・不安定な回線 という三重苦の環境でデータ通信が必要なあらゆる場面で採用されています。2019年にはISO/IEC国際標準として正式に認定されました。


パブリッシュ/サブスクライブ:MQTTの仕組み

MQTTの核心は パブリッシュ/サブスクライブ(Pub/Sub)モデル です。送信者と受信者が直接つながらず、間に ブローカー と呼ばれる中継サーバーを置く点がHTTPなどの一般的な通信と大きく異なります。

登場人物役割具体例
パブリッシャーメッセージを「投稿」する側温度センサー、スマート電球
ブローカーメッセージを仕分け・配送する中継役MosquittoサーバーやAWS IoT Core
サブスクライバーメッセージを「購読」する側監視ダッシュボード、スマホアプリ
トピック仕分けに使うラベル(チャンネル名)factory/line1/temperature

覚え方:「LINEのグループ通知」

「特定のグループ(トピック)に投稿したら、そのグループに入っているメンバー全員に届く」――LINEのグループ通知とほぼ同じイメージです。センサー(パブリッシャー)がブローカーに温度データを投稿すると、そのトピックを登録した監視システム(サブスクライバー)がまとめて受け取ります。センサー側はどこに届くかを気にしなくていいので、多対多の通信をシンプルに実現できます。

QoSレベル:届け方の確実さを3段階で指定

MQTTでは、メッセージの配送品質を QoS(Quality of Service) として3段階から選べます。

QoSレベル名称届け方用途
0At most once最大1回。届かなくても再送しないセンサーの連続データ(少々欠けても問題ない)
1At least once必ず1回以上届ける(重複あり)アラート通知など
2Exactly once確実に1回だけ届ける課金・制御コマンドなど重要操作

歴史と背景

  • 1999年 — IBMのAndy Stanford-ClarkとArcomのArlen Nipperが石油パイプライン監視のために開発。衛星回線(低速・高コスト)での動作が要件だった
  • 2010年 — IBMがプロトコル仕様を無償公開。オープンソース化が始まる
  • 2013年 — OASIS(標準化団体)がMQTT 3.1.1として標準化
  • 2016年 — スマートホーム・産業IoTの普及とともに急速に採用が広がる
  • 2019年MQTT 5.0 をOASISが発行。エラーレポートやセッション管理が強化される。同年ISO/IEC 20922として国際標準化
  • 2020年代 — AWS IoT Core・Azure IoT Hub・Google Cloud IoT Coreがいずれも標準サポート。クラウドIoT基盤の共通言語に

HTTPとの比較:なぜIoTにHTTPではダメなのか

Webで使われる HTTP とMQTTを比較すると、IoTにMQTTが選ばれる理由がよくわかります。

比較項目HTTPMQTT
通信モデルリクエスト/レスポンス(1対1)パブリッシュ/サブスクライブ(多対多)
ヘッダサイズ数百〜数千バイト最小2バイト
接続の維持原則リクエストごとに接続常時接続(Keep-Alive)
電池消費多い少ない
リアルタイム配信苦手(ポーリングが必要)得意(プッシュ配信)
向いている用途Webページ取得・REST APIセンサーデータ収集・機器制御
MQTTのPub/Subモデル パブリッシャー 温度センサー パブリッシャー スマート電球 パブリッシャー 振動センサー ブローカー トピック仕分け・配送 例: Mosquitto / AWS IoT サブスクライバー 監視ダッシュボード サブスクライバー スマホアプリ サブスクライバー クラウドDB publish(投稿)→ ブローカーが仕分け → subscribe(受信)

関連する規格・RFC

規格・RFC番号内容
OASIS MQTT 3.1.12013年策定の主要バージョン。多くの既存デバイスが対応
OASIS MQTT 5.02019年策定。エラーコード・共有サブスクリプション・メッセージ有効期限を追加
ISO/IEC 20922:2016MQTT 3.1.1の国際標準化
RFC 8323CoAP over TCP(MQTTと競合するIoT向けプロトコルCoAPの参考)
TLS 1.2 / 1.3MQTTの通信暗号化に使われるトランスポート層セキュリティ

関連用語