什麼是適用於 Apache Kafka 的 Azure 事件中樞

本文說明如何使用 Azure 事件中樞來串流來自 Apache Kafka 應用程式的資料,而不需自行設定 Kafka 叢集。

注意

標準、進階專用層支援此功能。

概觀

Azure 事件中樞在事件中樞上提供一個 Apache Kafka 端點,可讓使用者使用 Kafka 通訊協定連線到事件中樞。 您通常可以從應用程式使用事件中樞的 Kafka 端點,而不需要變更任何程式碼。 您只需修改設定,亦即,更新設定中的連接字串,以指向事件中樞所公開的 Kafka 端點,而非指向 Kafka 叢集。 然後,便可開始將事件從使用 Kafka 通訊協定的應用程式中串流到事件中樞,這相當於 Kafka 主題。

注意

Kafka 生態系統的事件中樞支援 Apache Kafka 1.0 版及更新版本。

Apache Kafka 和 Azure 事件中樞的概念對應

概念上,Kafka 和事件中樞非常類似。 它們都是針對串流資料所建立的分割區記錄,在其中用戶端會控制要讀取的保留記錄檔部分。 下表提供 Kafka 與事件中樞之間的概念對應。

Kafka 概念 事件中樞概念
叢集 命名空間
主題 事件中樞
資料分割 資料分割
消費者群組 消費者群組
Offset Offset

Apache Kafka 與 Azure 事件中樞之間的主要差異

雖然 Apache Kafka 是您通常需要安裝和操作的軟體,但事件中樞是完全受控的雲端原生服務。 沒有任何伺服器、磁碟或網路需要管理和監視,也從沒有要考慮或設定的任何訊息代理程式。 您會建立命名空間,其為具有完整網域名稱的端點,然後您會在該命名空間內建立事件中樞 (主題)。

如需關於事件中樞和命名空間的詳細資訊,請參閱事件中樞功能。 作為雲端服務,事件中樞會使用穩定的單一虛擬 IP 位址作為端點,因此用戶端不需要了解叢集內的訊息代理程式或機器。 雖然事件中樞會實作相同的通訊協定,但此差異表示所有分割區的所有 Kafka 流量都會透過此端點以可預測的方式路由,而不需要為叢集的所有訊息代理程式取得防火牆存取權。

事件中樞的調整是由您購買的輸送量單位 (TU)處理單位所控制。 如果您針對標準層命名空間啟用自動擴充功能,當您達到輸送量限制時,事件中樞就會自動擴大 TU。 此功能也適用於 Apache Kafka 通訊協定支援。 針對進階層命名空間,您可以增加指派給命名空間的處理單位數目。

Apache Kafka 是適合您工作負載的正確解決方案嗎?

使用 Apache Kafka 來建置應用程式時,了解 Azure 事件中樞是一群服務的一部分,其中也包括 Azure 服務匯流排Azure 事件方格,也很有用。

雖然 Apache Kafka 的某些商業散發提供者可能會建議 Apache Kafka 是您所有訊息平台需要的一站式服務,但事實上,Apache Kafka 並不會實作競爭-取用者佇列模型 (舉例而言),在允許訂閱者根據一般偏移以外的伺服器評估規則存取內送訊息的層級上不支援發行-訂閱,而且沒有任何工具可追蹤訊息所起始作業的生命週期,或是將錯誤訊息內襯到寄不出的信件佇列中,這些都是許多企業傳訊案例的基礎。

若要了解模式之間的差異,以及哪一種模式最適合由何種服務涵蓋,請參閱 Azure 中的非同步訊息選項指導。 身為 Apache Kafka 使用者,您可以發現您到目前為止已透過 Kafka 實現的通訊路徑,可以使用事件方格或 服務匯流排,以較不基本的複雜度和更強大的功能來實現。

如果您需要 Apache Kafka 的特定功能,其無法透過適用於 Apache Kafka 的事件中樞介面取得,或如果您的實作模式超過事件中樞配額,則您也可以在 Azure HDInsight 中執行原生 Apache Kafka 叢集

安全性和驗證

每次您發佈或取用適用於 Kafka 的事件中樞的事件/資料時,您的用戶端都會嘗試存取事件中樞資源。 您想要確保使用已授權的實體來存取資源。 使用 Apache Kafka 通訊協定搭配您的用戶端時,您可以使用 SASL 機制來設定組態以進行驗證和加密。 使用適用於 Kafka 的事件中樞時,需要 TLS 加密 (因為與事件中樞傳輸中的所有資料都是以 TLS 加密),因此可以在設定檔中指定 SASL_SSL 選項來完成。

Azure 事件中樞提供多個選項來授權存取您的安全資源。

  • OAuth 2.0
  • 共用存取簽章 (SAS)

OAuth 2.0

事件中樞與 Microsoft Entra ID 整合,其提供符合 OAuth 2.0 規範的集中式授權伺服器。 使用 Microsoft Entra ID 時,您可以使用 Azure 角色型存取控制 (Azure RBAC),將更細緻的權限授與您的用戶端身分識別。 您可以將此功能與 Kafka 用戶端搭配使用,方法是指定 SASL_SSL 作為通訊協定和 OAUTHBEARER 作為機制。 如需設定存取範圍的 Azure 角色和層級的詳細資訊,請參閱使用 Microsoft Entra ID 授權存取

bootstrap.servers=NAMESPACENAME.servicebus.windows.net:9093
security.protocol=SASL_SSL
sasl.mechanism=OAUTHBEARER
sasl.jaas.config=org.apache.kafka.common.security.oauthbearer.OAuthBearerLoginModule required;
sasl.login.callback.handler.class=CustomAuthenticateCallbackHandler

注意

上述組態屬性適用於 Java 程式設計語言。 如需示範如何搭配使用 OAuth 與使用不同程式設計語言之 Kafka 事件中樞的範例,請參閱 GitHub 上的範例

共用存取簽章 (SAS)

事件中樞也會提供共用存取簽章 (SAS),以提供對 Kafka 資源事件中樞的委派存取。 使用 OAuth 2.0 權杖型機制來授與存取,可提供更高的安全性,並讓您更輕鬆地使用 SAS。 內建角色也可以免除以 ACL 為基礎的授權需求,其必須由使用者維護及管理。 您可以將此功能與 Kafka 用戶端搭配使用,方法是指定 SASL_SSL 作為通訊協定和 PLAIN 作為機制。

bootstrap.servers=NAMESPACENAME.servicebus.windows.net:9093
security.protocol=SASL_SSL
sasl.mechanism=PLAIN
sasl.jaas.config=org.apache.kafka.common.security.plain.PlainLoginModule required username="$ConnectionString" password="{YOUR.EVENTHUBS.CONNECTION.STRING}";

重要

{YOUR.EVENTHUBS.CONNECTION.STRING} 取代為事件中樞命名空間的連接字串。 如需有關取得連接字串的指示,請參閱取得事件中樞連接字串。 以下是範例組態:sasl.jaas.config=org.apache.kafka.common.security.plain.PlainLoginModule required username="$ConnectionString" password="Endpoint=sb://mynamespace.servicebus.windows.net/;SharedAccessKeyName=RootManageSharedAccessKey;SharedAccessKey=XXXXXXXXXXXXXXXX";

注意

使用 SAS 驗證搭配 Kafka 用戶端時,重新產生 SAS 金鑰時,已建立的連線不會中斷連線。

注意

使用適用於 Apache Kafka 的事件中樞端點時,不支援產生的共用存取簽章權杖

範例

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

其他 Azure 事件中樞功能

「適用於 Apache Kafka 的事件中樞」功能是在 Azure 事件中樞上同時提供的三項通訊協定之一,可補充 HTTP 和 AMQP。 您可以使用任何一種通訊協定來撰寫,並以任何其他通訊協定進行讀取,使得您目前的 Apache Kafka 生產者可以繼續透過 Apache Kafka 發行,但您的讀取者可以利用與事件中樞的 AMQP 介面 (例如 Azure 串流分析或 Azure Functions) 的原生整合來獲益。 相反地,您可以輕鬆地將 Azure 事件中樞整合至 AMQP 路由網路作為目標端點,還可透過 Apache Kafka 整合來讀取資料。

此外,事件中樞功能 (例如擷取) 可透過 Azure Blob 儲存體和 Azure Data Lake Storage 進行極具成本效益的長期保存,而異地災害復原也可與適用於 Kafka 的事件中樞搭配運作。

等冪

適用於 Apache Kafka 的 Azure 事件中樞同時支援冪等生產者和冪等取用者。

Azure 事件中樞的核心原則之一是傳遞至少一次的概念。 此方法可確保一律傳遞事件。 這也表示函式等取用者可以多次,甚至重複接收事件。 因此,取用者必須支援冪等取用者模式。

Apache Kafka 的功能差異

適用於 Apache Kafka 的事件中樞的目標是要將 Azure 事件中樞功能的存取提供給已鎖定至 Apache Kafka API 的應用程式,否則必須由 Apache Kafka 叢集來支援。

以上所述,Azure 傳訊團隊針對許多傳訊案例提供豐富且穩固的涵蓋範圍,雖然目前未透過事件中樞針對 Apache Kafka API 的支援來支援下列功能,我們會指出在何處以及如何取得所需的功能。

交易

Azure 服務匯流排有強固的交易支援,可允許接收和安排訊息和工作階段,同時在交易的一致性保護下,將從訊息處理產生的輸出訊息傳送至多個目標實體。 功能集不只允許在序列中處理每個訊息一次,還可避免另一個取用者不慎重新處理與 Apache Kafka 相同訊息的風險。 服務匯流排是交易式訊息工作負載的建議服務。

壓縮

Apache Kafka 的用戶端壓縮功能會在生產者端將多個訊息的批次壓縮成單一訊息,並在取用者端將該批次解壓縮。 Apache Kafka 訊息代理程式會將批次視為特殊訊息。

Kafka 生產者應用程式開發人員可以藉由設定壓縮類型屬性來啟用訊息壓縮。 在公開預覽中,唯一支援的壓縮演算法是 gzip。

Compression.type = none | gzip

目前僅 Apache Kafka 流量生產者和取用者流量支援此功能。 AMQP 取用者可以使用壓縮的 Kafka 流量作為解壓縮的訊息。 任何事件中樞事件的承載都是位元組串流,而且內容可以使用您選擇的演算法加以壓縮,但在公開預覽中,gzip 是唯一選項。 使用 Kafka 壓縮的優點是透過更小的訊息大小,增加可傳輸的承載大小,並降低訊息代理程式資源的耗用量。

Kafka Streams

Kafka Streams 是串流分析的用戶端連結庫,屬於 Apache Kafka 開放原始碼專案的一部分,但與 Apache Kafka 事件代理程式不同。

Azure 事件中樞客戶要求取得 Kafka Streams 支援的最常見原因,是因為他們對 Confluent 的 "ksqlDB" 產品有興趣。 "ksqlDB" 是一項專屬的共用原始碼專案,其授權使得「提供軟體即服務、平台即服務、基礎結構即服務,或與 Confluent 產品或服務競爭的其他類似線上服務」的任何廠商不被允許使用或提供 "ksqlDB" 支援。 實際上,如果您使用 ksqlDB,您必須自行操作 Kafka,否則您必須使用 Confluent 的雲端供應項目。 授權條款可能也會影響針對授權所排除的目的提供服務的 Azure 客戶。

獨立且不含 ksqlDB,Kafka Streams 的功能比許多替代架構和服務更少,其中大部分都有內建的串流 SQL 介面,且全都與現今的 Azure 事件中樞整合:

列出的服務和架構通常可以透過介面卡,直接從一組不同的來源取得事件串流和參考資料。 Kafka Streams 只能從 Apache Kafka 取得資料,而您的分析專案則會因此鎖定至 Apache Kafka。 若要使用來自其他來源的資料,您必須先使用 Kafka Connect 架構將資料匯入至 Apache Kafka。

如果您必須在 Azure 上使用 Kafka Streams 架構, HDInsight 上的 Apache Kafka 會提供您該選項。 HDInsight 上的 Apache Kafka 可讓您完全控制 Apache Kafka 的所有設定層面,同時完全與 Azure 平台的各個層面的整合,從容錯/更新網域放置到網路隔離,到監視整合。

下一步

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

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

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