Taste of Tech Topics

Acroquest Technology株式会社のエンジニアが書く技術ブログ

MQTT Broker比較(2015/12版)

こんにちは、ishida(@)です。

「IoT」という言葉も、IT/ICT関係者だけでなく、一般ニュースやビジネス雑誌にも登場するようになり、大分バズって広まってきていますね。

IoTといえば、やはりMQTTとの関係は切り離せず、商用のMQTT Brokerとしては、Sango だけでなく、 AWS IoT なども登場してきており、どれを利用するのが良いか、迷ってしまいますよね。

また、前回2015年6月にOSSの MQTT Broker 比較を行った際は、日本語の記事にも関わらず、VerneMQやeMQTTのコミッタの方からコメントも頂き、反響の大きさには驚きました。
ということで、OSSのBrokerも、バージョンアップがされてきているので、改めて比較レポートを作成しました!

※前回の比較内容は以下になります。

機能比較

各MQTT Brokerの機能比較に関しては、以下のようになります(○:対応あり、×:対応なし)。

Broker(version) 開発言語 対応しているMQTT version 対応OS QoSレベル Retain Will WebSocket UI 冗長化
Mosquitto(1.4.5) C MQTT 3.1/3.1.1 Win/Mac/Linux 0,1,2 × ×
Apollo(1.7.1) Java MQTT 3.1 Win/Mac/Linux 0,1,2 ×
RabbitMQ(3.5.6) Erlang MQTT 3.1 Win/Mac/Linux 0,1 × ×
Mosca(0.32.1) Node.js MQTT 3.1 Win/Mac/Linux 0,1 × ×
eMQTT(0.13.0) Erlang MQTT 3.1/3.1.1 Win/Mac/Linux 0,1,2
VerneMQ(0.12.2) Erlang MQTT 3.1/3.1.1 Mac/Linux 0,1,2 ×
  • Brokerのversionは調査時のものです。
  • 今回、新たに「対応OS」の列を加えました。

性能比較

Publish性能(retain=false)

f:id:acro-engineer:20151209050553p:plain

Publish性能(retain=true)

f:id:acro-engineer:20151209050557p:plain

Subscribe性能

f:id:acro-engineer:20151209050559p:plain

  • グラフの縦軸は「スループット(処理したメッセージ数/秒)」です。
  • 機能的に対応していない箇所はグラフを記載していません。

結果

  • eMQTTには管理のためのWebUIが追加されて、使い勝手が良くなりました。
  • eMQTTとVerneMQは、前回評価時は、retainをtrueにした際の性能が大幅に低下したのですが、今回はその点が改善され、retainをtrueにしても性能劣化は見られなくなりました。
  • eMQTTが全体的に性能が向上し、VerneMQと同等の性能になっています。


前回評価時から、たった半年ですが、eMQTTやVerneMQなどはリリースの頻度も多く、性能も大幅に改善されていました。
個人的には、前回の結果からは「使うならVerneMQだろう」と思っていたのですが、今回の結果からはeMQTTもかなり魅力的になりました。

用途や目的に応じて、最適なBrokerを選択するのに役に立てて頂ければと思います。

計測内容

計測について、以下に処理内容を示します。

  1. Publish(Retainなし)
    • MQTT Broker に対して、クライアントからメッセージを送信する処理になります。Retainなしの場合は、最後にPublishされたメッセージをBrokerが保持しません。
  2. Publish(Retainあり)
    • MQTT Broker に対して、クライアントからメッセージを送信する処理になります。Retainありの場合は、最後にPublishされたメッセージをBrokerが保持します。
  3. Subscribe
    • MQTT Broker から、クライアントがメッセージを受信する処理になります。MQTTの特性として、接続されているときのみメッセージを受信するため、Subscribeしている間、それとは別プロセスでPublish(Retainなし)の処理を行っています。

またベンチマークの条件は以下になります。

  • 構成、メッセージ長
    • MQTT Broker に対して、500connections で同時処理
    • 1つのメッセージ長は 1024byte
  • マシンスペック
    • OS: CentOS 6.5 (64bit)
    • CPU: Intel(R) Core(TM) i7-2700K CPU @ 3.50GHz (4コア HT有効)
    • メモリ: 32GB
    • NIC: 1Gbps

Acroquest Technologyでは、キャリア採用を行っています。


  • 日頃勉強している成果を、AWSHadoop、Storm、NoSQL、SpringBoot、HTML5/CSS3/JavaScriptといった最新の技術を使ったプロジェクトで発揮したい。
  • 社会貢献性の高いプロジェクトに提案からリリースまで携わりたい。
  • 書籍・雑誌等の執筆や対外的な勉強会の開催を通した技術の発信や、社内勉強会での技術情報共有により、技術的に成長したい。
  • OSSの開発に携わりたい。

 
少しでも上記に興味を持たれた方は、是非以下のページをご覧ください。
 キャリア採用ページ