MQTT 如何與 Kafka 一起使用?
MQTT (Message Queuing Telemetry Transport) 是一種輕量級的消息傳輸協定,專為受限網絡環境下的裝置通信而設計。Apache Kafka 是一個分布式流處理平台,旨在處理大規模的實時資料流。
Kafka 和 MQTT 是實作物聯網資料端到端內建的互補技術。通過結合使用 Kafka 和 MQTT,企業可以建構一個強大的物聯網架構,實作裝置和物聯網平台之間的穩定連接配接和高效資料傳輸。同時,它還能支援整個物聯網系統高吞吐量資料的實時處理和分析。
MQTT 和 Kafka 的內建可以為許多物聯網場景帶來重要價值,例如網聯汽車和車聯網、智能城市基礎設施、工業物聯網監控、物流管理等。在本文中,我們将介紹如何實作 MQTT 資料與 Kafka 在物聯網應用中的無縫內建。
Kafka 和 MQTT 可以解決哪些物聯網挑戰?
在設計物聯網平台架構時,需要解決以下幾個挑戰:
- 連接配接性和網絡彈性:在某些關鍵的物聯網場景中,如網聯汽車,需要通過網絡連接配接将資料發送到平台。架構應該能夠應對網絡連接配接不穩定、網絡延遲等各種網絡狀況。
- 擴充性:為了應對不斷增長的裝置數量,架構應具備良好的可擴充性,能夠處理不斷增加的物聯網裝置所産生的大量資料。
- 消息吞吐量:物聯網裝置實時産生大量的資料,如傳感器讀數、位置資訊等。平台架構必須支援高消息吞吐量,以確定所有資料都能夠有效采集、處理和分發給相應的元件。
- 資料存儲:物聯網裝置持續産生資料流,需要高效的資料存儲和管理方案。
為什麼需要在物聯網架構中內建 MQTT 與 Kafka?
Kafka 作為一個可靠的流資料處理平台,能夠有效地促進企業系統間的資料共享,但在物聯網場景中,它存在一些不足之處:
- 不可靠的連接配接:Kafka 用戶端需要穩定的 IP 連接配接,這對于在不穩定的移動網絡上運作的物聯網裝置來說是一個挑戰。這些網絡的連接配接非常不穩定,會導緻 Kafka 所需的持續通信出現中斷。
- 用戶端的複雜性和資源密集性:Kafka 用戶端以其複雜性和資源消耗而著稱。這對于資源受限的小型物聯網裝置來說是個難題,因為在這些裝置上運作 Kafka 用戶端可能不現實或效率低下。
- 主題的可擴充性:Kafka 在處理大量主題時存在一些限制。對于物聯網應用來說,這可能是一個問題,因為它們可能涉及許多不同的主題,而 Kafka 的架構可能無法有效适應這種情況,尤其是在涉及大量裝置且每個裝置都有多個主題的情況下。
通過 MQTT 和 Kafka 的內建,可以克服 Kafka 在物聯網裝置連接配接方面的許多限制:
- 可靠的連接配接:MQTT 被設計為在不穩定的網絡環境中運作,是以成為物聯網裝置之間可靠的消息傳輸協定。
- 輕量級用戶端:MQTT 用戶端被設計為輕量級,非常适合于資源受限的物聯網裝置使用。
- 海量主題擴充:MQTT 在處理大量業務主題方面表現出色,對具有大量主題的物聯網平台來說它是最理想的選擇。可以通過 MQTT 将海量主題彙聚後映射到 Kakfa 主題中,實作物聯網資料的彙聚處理。
幾種可行的 MQTT-Kafka 內建解決方案對比
在物聯網平台中內建 MQTT 和 Kafka 有幾種可選的方案。每個方案都有自己的優缺點和需要考慮的因素。下面我們來看一些常用的 MQTT+Kafka 內建方案。
EMQX Kafka 資料內建
EMQX 是一款流行的 MQTT Broker,通過其内置的 Kafka 資料內建功能,能夠實作與 Kafka 的無縫內建。作為 MQTT 和 Kafka 之間的橋梁,EMQX 實作了這兩者之間的流暢通信。
這種內建使得可以以生産者(向 Kafka 發送消息)和消費者(從 Kafka 接收消息)兩種角色建立資料橋接。EMQX 允許使用者以這兩種角色中的任意一種建立資料橋接。EMQX 具有雙向資料傳輸能力,為架構設計提供了很大的靈活性。此外,它還具有低延遲和高吞吐量的特點,保證了資料橋接操作的高效性和可靠性。
Confluent MQTT 代理
Confluent 是 Kafka 的商業營運公司。它提供了一個 MQTT 協定代理子產品,用于連接配接 MQTT 用戶端和 Kafka Broker,使用戶端能夠釋出和訂閱 Kafka 主題。這個解決方案将與 Kafka Broker 直接通信的複雜性進行了抽象化,簡化了內建過程,避免了多餘的複制和延遲。
目前,這個解決方案隻支援 MQTT 3.1.1 版本,并且 MQTT 用戶端的連接配接性能可能會影響資料吞吐量。
對開源 MQTT Broker 和 Kafka 進行定制開發
使用者可以使用開源的 MQTT Broker,自行開發橋接服務,實作 MQTT 和 Kafka 的連接配接。這個橋接服務通過 MQTT 用戶端從 MQTT Broker 訂閱資料,并利用 Kafka Producer API 将資料發送到 Kafka。
這個解決方案需要使用者自己開發和維護橋接服務,并且要考慮可靠性和擴充性的問題。
使用 EMQX 将 MQTT 資料內建到 Kafka
EMQX 作為一款高度可擴充的 MQTT Broker,為物聯網平台提供了強大的功能。其資料內建能力讓 MQTT 資料能夠與 Apache Kafka 實作輕松高效的雙向傳輸。
EMQX 支援海量的裝置連接配接,結合 Kafka 強大的高吞吐量和持久的資料處理能力,為物聯網建構了完美的資料基礎設施。
EMQX 提供了以下 MQTT 到 Kafka 的功能:
- 雙向連接配接:EMQX 不僅可以将裝置的 MQTT 消息批量轉發到 Kafka,還可以從後端系統訂閱 Kafka 消息并下發到連接配接的物聯網用戶端。
- 靈活的 MQTT 到 Kafka 主題映射:EMQX 支援多種主題映射方式,例如一對一、一對多、多對多等,同時還支援 MQTT 主題過濾器(通配符)。
- EMQX Kafka 生産者支援同步/異步寫入模式,可根據不同場景靈活平衡延遲和吞吐量。
- 實時名額,例如消息總數,成功/失敗傳遞數,消息速率等,可與 SQL 規則結合使用,用于在将消息推送到 Kafka 或裝置之前進行資料的提取、過濾、豐富和轉換等操作。
應用場景示例:MQTT 和 Kafka 賦能網聯汽車和車聯網
MQTT + Kafka 的架構适用于不同行業的各種物聯網平台,特别是網聯汽車和車聯網領域。
以下是這種架構的主要應用場景:
- 車載資訊系統和車輛資料分析:MQTT + Kafka 架構可以實作對海量實時車輛資料的雲端接入、流式處理與分析,例如傳感器讀數、GPS 位置、油耗和駕駛行為資料等。這些資料可以用于車輛性能監控、預測性維護、車隊管理并提高整體營運效率。
- 智能交通管理:通過內建 MQTT 和 Kafka,可以擷取和處理來自各種交通源的資料,例如網聯汽車、交通傳感器和基礎設施。這有助于開發智能交通管理系統,實作實時交通監控、擁堵檢測、路線優化和智能交通信号控制。
- 遠端診斷:MQTT + Kafka 架構支援網聯汽車的高吞吐量資料傳輸。它可以用于遠端診斷和故障排除,實作主動維護和快速問題解決。
- 能源效率和環境影響:MQTT + Kafka 架構使得網聯汽車可以與智能電網系統和能源管理平台進行雙向資料互動。這個應用場景包括實時監測能源消耗,實施需求響應機制,以及優化電動汽車充電政策。
- 預測性維護:MQTT + Kafka 架構使得可以持續跟蹤車輛健康和性能資料。這個應用場景涉及高吞吐量實時車載資料收集,異常檢測和預測性維護算法。車主可以及時發現潛在問題并安排維護任務。
結語
MQTT + Kafka 架構非常适用于需要實時資料收集、擴充性、可靠性和物聯網內建能力的應用場景。它能夠實作資料的流暢傳輸、高效溝通和創新應用,例如網聯汽車生态系統中的各種功能和服務。是以,MQTT 和 Kafka 的結合是一種理想的物聯網架構解決方案,它能夠實作物聯網裝置和雲之間的無縫端到端內建,并確定雙向通信的可靠性。