A. MQTT Broker 選型
MQTT Broker選型
在構建分布式系統時,選擇合適的MQTT Broker至關重要,它負責接收發布者發布的消息並將其分發給不同的訂閱者。市面上有許多MQTT Broker可供選擇,以下是一些常用選項的對比與分析。
Mosquitto
Mosquitto是由Eclipse出品的開源MQTT Broker,基於C/C++語言編寫,當前版本為1.5.8。其特點包括支持MQTT 3.1/3.1.1協議,但性能上存在一些限制,如內存優化、多線程的鎖機制等。它適合運行在低功耗設備上,如嵌入式感測器、手機和微處理器,但不適用於大規模雲服務。官方文檔顯示其理論支持約10萬連接,實際使用中還需根據具體情況進行評估。
EMQ (emqttd)
EMQ,一款國人開發的開源MQTT Broker,目前版本為2.0和3.0,2.0版本支持本地共享訂閱,3.0版本新增集群共享訂閱功能。EMQ具有完整QoS支持、單節點100萬連接能力、分布式集群支持、多種驗證插件(如LDAP、MySQL、PostgreSQL等)以及API、Web監控界面等特性。官方宣稱支持MQTT 3.1、3.1.1和5.0版本,並在性能上做了優化。然而,開源版本不支持伺服器內部消息持久化,這是其一個顯著限制。
HiveMQ
HiveMQ是一款企業級MQTT Broker,使用Java編寫,功能豐富,支持MQTT 3.1、3.1.1和5.0版本,完整QoS支持,分布式集群,持久化支持,流量控制,IPv6支持等。其唯一限制在於高昂的費用,沒有公開源碼供參考。集群基於Jgroups,數據同步通過自定義一致性哈希和VectorClock實現。多線程和並發控制使用Google的guava庫,代碼質量高。
MqttWk
MqttWk是一個基於nutzboot、netty、redis和kafka實現的MQTT服務開源Broker,代碼簡潔易懂。它支持MQTT和Websocket連接方式,集群功能和消息分發重試,但存在一些限制,如消息隊列非隊列結構、消息分發重試機制較差、主題限制等。它是上生產的項目,經歷過2萬設備連接的考驗。
Jmqtt
Jmqtt是一個基於Java的開源MQTT Broker,對現有開源Broker進行了優化,特別是在CONNECT處理和Session過期管理方面。支持MQTT和Websocket連接方式,使用RocksDB進行本地存儲,但不支持集群和SSL。
Moquette
Moquette是一個功能齊全的Java編寫的開源MQTT Broker,提供完整的QoS服務和認證方式,支持多種持久化存儲。然而,0.10版本中存在內存泄漏問題,官方修復後發布為irubant/moquette。其集群功能僅使用Hazelcast作為消息匯流排,不支持共享訂閱。
綜上所述,選擇合適的MQTT Broker需考慮應用的具體需求,包括連接數量、協議版本、性能要求、集群支持、消息持久化、安全認證等因素。在選擇時,應充分評估各Broker的特性和限制,以滿足實際應用場景的需要。