共用方式為


Azure IoT 作業內建的本機 MQTT 訊息代理程式

重要

此頁面包含使用 Kubernetes 部署指令清單來管理 Azure IoT Operations 元件的指示,其處於預覽狀態。 這項功能隨附 數個限制,不應用於生產工作負載。

請參閱 Microsoft Azure 預覽版增補使用規定,以了解適用於 Azure 功能 (搶鮮版 (Beta)、預覽版,或尚未正式發行的版本) 的法律條款。

Azure IoT 作業具有企業級、符合標準的 MQTT 訊息代理程式,可調整、高可用性和 Kubernetes 原生。 其提供 Azure IoT 操作的傳訊平面、啟用雙向邊緣/雲端通訊,並在邊緣推動事件驅動的應用程式

MQTT 合規性

訊息佇列遙測傳輸 (MQTT) 已崛起成為 IoT 領域中通訊協定的通用語言。 MQTT 的簡單設計可讓單一訊息代理程式同時為數萬個用戶端提供服務,並建立和管理輕量型發行訂閱主題。 許多 IoT 裝置都支援原生現成的 MQTT,而下游轉譯閘道將 IoT 通訊協定的長尾合理化為 MQTT。

MQTT 訊息代理程式支援IoT作業中的傳訊層,並支援 MQTT v3.1.1 和 MQTT v5。 如需支援 MQTT 功能的詳細資訊,請參閱 MQTT 代理程式中的 MQTT 功能支援

架構

MQTT 訊息代理程式有兩個主要層:

  • 無狀態前端層。
  • 具狀態和分區化後端層。

前端層會處理用戶端連線和要求,並將其路由傳送至後端。 後端層會依不同的索引鍵分割數據,例如用戶端會話的用戶端標識碼,以及主題訊息的主題名稱。 其使用鏈結複寫來複寫每個分割區內的資料。

架構的目標如下:

  • 容錯和隔離:如果後端 Pod 失敗並防止失敗傳播到系統的其餘部分,訊息發佈會繼續
  • 失敗復原:自動失敗復原,而無需操作員介入
  • 沒有訊息遺失:如果分割區中至少有一個前端 Pod 和一個後端 Pod 正在執行,則傳遞訊息
  • 彈性調整:水平調整發佈和訂閱輸送量以支援邊緣和雲端部署
  • 大規模一致的效能:限制因鏈結複寫所造成的訊息延遲負荷
  • 操作簡單:對外部元件的最小相依性,以簡化維護和複雜性

組態

針對設定,MQTT 訊息代理程式是由數個 Kubernetes 自定義資源所組成,可定義訊息代理程式行為和功能的不同層面。

  • 主要資源是 Broker,其會定義全域設定,例如基數、記憶體使用量配置檔和診斷設定。
  • Broker 最多可以有三 個 BrokerListeners,每個 Broker 都會接聽指定服務類型上的傳入 MQTT 連線(NodePort、LoadBalancer 或 ClusterIP)。 每個 BrokerListener 可以有多個連接埠。
  • BrokerListener 中的每個埠都可以與 BrokerAuthentication 資源和 BrokerAuthorization 資源相關聯。 這些是驗證和授權原則,可決定哪些用戶端可以連線到埠,以及他們可以在訊息代理程式上執行的動作。

因此,Broker 與 BrokerListener 之間的關聯性是 一對多,而 BrokerListener 與 BrokerAuthentication/BrokerAuthorization 之間的關聯性是 多對多。 這些資源的實體關聯性圖表 (ERD) 如下所示:

顯示訊息代理程序資源模型的圖表。

根據預設,Azure IoT 作業會 部署預設 Broker預設 BrokerListener預設 BrokerAuthentication。 所有這些資源都會命名為 default。 這些資源一起提供 Azure IoT 作業運作所需的基本 MQTT 訊息代理程式設定。 預設設定如下所示:

此圖顯示預設訊息代理程序資源和它們之間的關聯性。

重要

若要防止 Azure IoT Operations 內部元件之間的通訊意外中斷,建議您不要修改任何預設組態。

若要自定義 MQTT 訊息代理程式部署, 請將 BrokerListeners、BrokerAuthentication 和 BrokerAuthorization 等新資源新增 至預設 Broker。

Broker 資源本身是不可變的,無法在部署之後修改,但只需要在進階案例中進行自定義。 若要深入瞭解自定義 Broker 資源,請參閱 自定義預設 Broker

在完整部署中,您可以有多個 BrokerListeners,每個埠都有多個埠,而且每個埠可以有相關聯的不同 BrokerAuthentication 和 BrokerAuthorization 資源。

例如,從預設設定開始,您可以新增:

  • 名為 example-lb-listener 且兩個埠為 1883 和 8883 的 LoadBalancer BrokerListener
  • 名為 example-nodeport-listener 且具有單一埠 1884 的 NodePort BrokerListener(nodePort 31884)
  • 具有自定義驗證方法的 BrokerAuthentication 資源,名為 example-authn
  • 具有自定義授權設定的 BrokerAuthorization 資源 example-authz

然後,如果您設定所有新的埠使用相同的 BrokerAuthentication 和 BrokerAuthorization 資源,安裝程式看起來會像這樣:

此圖顯示完整的自定義訊息代理程式部署和每個之間的關聯性。

如此一來,您會維持預設設定不變,並新增資源來自定義 MQTT 訊息代理程式部署以符合您的需求。

默認 Broker 資源

每個 Azure IoT 作業部署只能有一個 Broker,而且必須命名為 預設值。 Azure IoT 作業需要預設的 Broker 資源才能運作。 這是不可變的,無法在部署後修改。

警告

請勿刪除預設 Broker 資源。 這樣做會中斷 Azure IoT Operations 內部元件之間的通訊,而部署將會停止運作。

自定義預設 Broker

大部分的設定都不需要自定義預設 Broker 資源。 需要自訂的設定包括:

  • 基數:判斷訊息代理程序處理更多連線和訊息的容量,並在Pod或節點失敗時增強高可用性。
  • 記憶體配置檔:設定訊息代理程式的最大記憶體使用量,以及如何在訊息代理程式相應增加時處理記憶體使用量。
  • 磁碟支援的訊息緩衝區:當 RAM 填滿時,將訊息緩衝處理至磁碟的設定。
  • 診斷設定:診斷設定,例如記錄層級和計量端點。
  • 進階 MQTT 用戶端選項:設定進階 MQTT 用戶端選項,例如會話到期、訊息到期和保持運作設定。
  • 內部流量加密:設定,以加密訊息代理程式前端與後端 Pod 之間的內部流量。

使用 Azure CLI 或 Azure 入口網站,必須在初始部署期間自定義預設代理程式。 如果需要不同的 Broker 組態設定,則需要新的部署。

若要在部署期間自定義預設 Broker:

遵循部署 Azure IoT 作業指南時,請在 [ 組態 ] 區段中查看 MQTT 訊息代理程序設定您可以在這裏自訂基數和記憶體設定檔設定。 若要設定其他設定,包括磁碟支援的訊息緩衝區和進階 MQTT 用戶端選項,請使用 Azure CLI。

檢視預設 Broker 設定

若要檢視預設 Broker 的設定:

  1. 在 Azure 入口網站 中,移至您的 Azure IoT 作業實例。
  2. 在 [元件] 底下,選取 [MQTT Broker]。
  3. 在 [訊息代理程序詳細數據] 底下,選取 [JSON 檢視]。

下一步

將 Azure IoT 作業部署至已啟用 Arc 的 Kubernetes 叢集