共用方式為


適用於 Azure 事件中樞的 Kafka 串流

本文提供如何使用 Azure 事件中樞 來取得 Kafka Streams 用戶端連結庫的詳細數據。

注意

Kafka Streams 功能僅適用於事件中 樞進階和專用層的公開預覽

概觀

Apache Kafka Streams 是 Java 唯一的用戶端連結庫,可提供處理串流數據的架構,並針對 Kafka 主題中儲存的數據建置即時應用程式。 所有處理都會限定於用戶端,而 Kafka 主題在輸出寫入目的地主題之前,會做為元數據的數據存放區。

事件中樞提供 Kafka 端點,以搭配您現有的 Kafka 用戶端應用程式使用,作為執行您自己的 Kafka 叢集的替代方案。 事件中樞適用於許多現有的 Kafka 應用程式。 如需詳細資訊,請參閱 適用於 Apache Kafka 的事件中樞

搭配使用 Kafka Streams 搭配 Azure 事件中樞

Azure 事件中樞 原生支援AMQP和Kafka通訊協定。 不過,為了確保相容的 Kafka Streams 行為,Kafka 用戶端必須更新某些預設組態參數。

屬性 事件中樞的默認行為 Kafka 數據流的修改行為 說明
messageTimestampType 設定為 AppendTime 應設定為 CreateTime Kafka Streams 依賴建立時間戳,而不是附加時間戳
message.timestamp.difference.max.ms 允許的最大值為90天 屬性只會用來控管過去的時間戳。 未來的時間設定為 1 小時,且無法變更。 這與 Kafka 通訊協定規格一致
min.compaction.lag.ms max allowed value is two days
無限保留主題 每個主題分割區的大小截斷 250 GB
刪除無限保留主題的記錄 API 未實作。 因應措施是可以更新主題,也可以設定有限的保留時間。 這會在 GA 中完成

其他考量

以下是要牢記的其他一些考慮。

  • Kafka 數據流用戶端應用程式必須獲得整個命名空間的管理、讀取和寫入許可權,才能建立數據流處理的暫存主題。
  • 暫存主題和數據分割會計入指定命名空間的配額。 布建命名空間或叢集時,應該考慮這些事項。
  • 「位移」存放區的無限保留時間受限於SKU的訊息保留時間上限。 檢查 這些階層特定值的事件中樞配額

其中包括,更新 中的 messageTimestampType 主題組態以使用 CreateTime (也就是事件建立時間),而不是 AppendTime (也就是記錄附加時間)。

若要覆寫預設行為(必要),必須在 Azure Resource Manager (ARM) 中設定下列設定。

注意

只會顯示 ARM 範本的特定部分,以醒目提示需要更新的組態。

{
  "parameters": {
    "namespaceName": "contoso-test-namespace",
    "resourceGroupName": "contoso-resource-group",
    "eventHubName": "contoso-event-hub-kafka-streams-test",
    ...
    "parameters": {
      "properties": {
        ...
        "messageTimestampType": "CreateTime",
        "retentionDescription": {
          "cleanupPolicy": "Delete",
          "retentionTimeInHours": -1,
          "tombstoneRetentionTimeInHours": 1
        }
      }
    }
  }
}

Kafka Streams 概念

Kafka 串流透過 Kafka 產生者和取用者 API 提供簡單的抽象層,以協助開發人員更快速地開始使用即時串流案例。 輕量連結庫取決於內部傳訊層的 Apache Kafka 相容代理程式(例如 Azure 事件中樞),並管理容錯本機狀態存放區。 使用交易 API 時,Kafka 串流連結庫支援豐富的處理功能,例如一次處理一次,一次處理一筆記錄。

記錄因事件時間型視窗化作業而失序而受益

資料流

數據流是 Kafka 主題的抽象表示法。 它是由未系結、持續更新不可變數據記錄的數據集所組成,其中每個數據記錄都是索引鍵/值組。

串流處理拓撲

Kafka 串流應用程式會透過處理器拓撲所代表的 DAG(導向無循環圖)來定義計算邏輯。 處理器拓撲包含數據流處理器(拓撲中的節點),代表由數據流(拓撲中的邊緣)連接的處理步驟。

串流處理器可以鏈結至上游處理器或下游處理器,但某些特殊情況除外:

  • 來源處理器 - 這些處理器沒有任何上游處理器,而且直接從一或多個數據流讀取。 然後,它們可以鏈結至下游處理器。
  • 接收處理器 - 這些處理器沒有任何下游處理器,而且必須直接寫入數據流。

您可以使用 Kafka Streams DSL 或較低層級的處理器 API 來定義串流處理拓撲。

數據流和數據表雙重性

串流和數據表是 Kafka Streams DSL 所提供的 2 個不同但實用的抽象概念,可模型化時間序列和關係型數據格式,這些格式必須並存以供串流處理使用案例使用。

Kafka 會進一步擴充此功能,並在數據流和數據表之間引進雙重性,其中

  • 數據流可視為數據表變更記錄,以及
  • 數據表可視為數據流每個索引鍵之最新值的快照集。

此雙重性可讓數據表和數據流視使用案例需要交換使用。

例如:

  • 使用動態交易聯結靜態客戶數據(模型化為數據表),以及
  • 聯結日交易員投資組合中不斷變化的投資組合倉位(模型化為數據流),以及最新的市場數據摘要(模型化為數據流)。

Time

Kafka Streams 允許視窗化和寬限函式允許擷取順序錯亂的數據記錄,並且仍包含在處理中。 為了確保此行為具決定性,Kafka 數據流中有額外的時間概念。 包括:

  • 建立時間(也稱為「事件時間」) - 這是事件發生和建立數據記錄的時間。
  • 處理時間 - 這是數據流處理應用程式處理數據記錄的時間(或取用時)。
  • 附加時間(也稱為「建立時間」) - 這是儲存數據並認可至 Kafka 訊息代理程式記憶體的時間。 這與建立時間不同,因為事件建立與訊息代理程序實際擷取之間的時間差異。

具狀態作業

狀態管理可讓複雜的串流處理應用程式,例如聯結和匯總來自不同數據流的數據。 這可透過 Kafka Streams 所提供的狀態存放區來達成,並使用 Kafka Streams DSL 中的具狀態運算符進行存取

DSL 中的具狀態轉換包括:

視窗和寬限

Kafka Streams DSL 中的視窗化作業可讓開發人員控制針對匯總和聯結等具狀態作業將記錄分組的方式。

視窗化作業也允許指定寬限期規格,為指定視窗的錯序記錄提供一些彈性。 指定窗口的記錄,並會在指定的窗口之後抵達,但接受寬限期內。 寬限期結束之後抵達的記錄會被捨棄。

應用程式必須使用視窗化和寬限期控件來改善順序錯亂記錄的容錯。 適當的值會根據工作負載而有所不同,而且必須以經驗方式識別。

處理保證

商務和技術使用者尋求從串流處理工作負載的輸出中擷取重要的商業見解,這可轉化為高交易性保證需求。 Kafka 串流會與 Kafka 交易一起運作,藉由與 Kafka 相容訊息代理程式 (例如 Azure 事件中樞) 基礎儲存系統整合,以確保以不可部分完成的方式寫入位移認可和狀態存放區更新,以確保交易處理保證。

為了確保交易處理保證, processing.guarantee Kafka Streams 組態中的設定必須從的預設值 at_least_once 更新為 exactly_once_v2 (在 Apache Kafka 2.5 之前或之後的用戶端版本)或 exactly_once (針對 Apache Kafka 2.5.x 之前的用戶端版本)。

下一步

本文概略介紹了適用於 Kafka 的事件中樞。 若要深入了解,請參閱適用於 Azure 事件中樞的 Apache Kafka 開發人員指南

如需具有建立事件中樞並使用 SAS 或 OAuth 進行存取的逐步指示教學課程,請參閱快速入門:使用 Kafka 通訊協定透過事件中樞的資料串流

此外,請參閱 GitHub 上的 OAuth 範例