
MQTT與Kafka完全不同。MQTT是由OASIS技術委員會的成員(大多數是IBM和Microsoft的高級工程師)開發的協議和技術標準。Kafka是LinkedIn首次實現的開源流平臺。2011年開放源碼后被Apache孵化器孵化,成為Apache軟件基金會的頂級項目。
兩者之間唯一的聯系是它們都與發布/訂閱模式相關。MQTT是基于發布/訂閱模式的消息傳遞協議,而ApacheKafka的生產和消費過程也是發布/訂閱模式的一部分。如果我們實現基于MQTT協議的消息代理,從發布/訂閱模式的角度來看,這個MQTT代理是否等同于Kafka?答案仍然是否定的。
雖然Kafka也是一個基于發布/訂閱模式的消息傳遞系統,但它也被稱為“分布式提交日志”或“分布式流平臺”。它的主要功能是實現分布式持久數據保存。Kafka的數據單元可以理解為數據庫中的一行“數據”或一條“記錄”。Kafka按主題分類。當Kafka的制作者發布特定主題的消息時,消費者就消費該特定主題的消息。事實上,生產者和消費者可以理解為發布者和訂閱者,主題就像數據庫中的一個表。每個主題包含多個分區,分區可以分布在不同的服務器上。也就是說,通過這種方式存儲和讀取分布式數據。Kafka的分布式體系結構有助于讀寫系統的擴展和維護(例如,通過備份服務器實現冗余備份,通過構建多個服務器節點實現性能改進)。在許多有大數據分析需求的大型企業中,Kafka將被用作數據流處理平臺。
MQTT最初是為物聯網設備的網絡訪問而設計的。大多數物聯網設備都是低性能、低功耗的計算機設備,網絡連接質量不可靠。因此,在設計協議時需要考慮以下幾個關鍵點:
- 該協議應該足夠輕量級,以允許嵌入式設備快速解析和響應。
- 足夠靈活,以支持物聯網設備和服務的多樣化。
- 它應該被設計成異步消息協議而不是異步協議。這是因為大多數物聯網設備的網絡延遲很可能非常不穩定。如果使用同步消息協議,IoT設備需要等待來自服務器的響應。為大量物聯網設備提供服務顯然是非常不現實的。
- 必須是雙向通信,并且服務器和客戶端應該能夠互相發送消息。
MQTT協議完美地滿足了上述要求,最新版本的MQTT v5.0協議已經過優化,使其比之前的v3.1.1版本更靈活,占用的帶寬更少。
對于基于mqtt的消息代理和Kafka的區別,EMQ先生認為這是因為他們的關注點不同。Kafka專注于數據的存儲和讀取,針對高實時性能的流式數據處理場景,而MQTT Broker則側重于客戶端和服務器之間的通信。
MQTT broker和Kafka采用的消息交換模式非常相似,因此將它們結合起來顯然是個好主意。事實上,一些MQTT代理,例如EMQ X MQTT broker, 已經實現了MQTT-broker和Kafka之間的橋接。MQTT-broker用于快速接收和處理來自大量物聯網設備的消息,Kafka收集并存儲這些大量數據并將其發送給數據分析員來分析和處理消息。
