什麼是適用於 Apache Kafka 的 Azure 事件中樞
本文說明如何使用 Azure 事件中樞來串流來自 Apache Kafka 應用程式的資料,而不需自行設定 Kafka 叢集。
注意
僅標準、進階和專用層支援此功能。
概觀
Azure 事件中樞在事件中樞上提供一個 Apache Kafka 端點,可讓使用者使用 Kafka 通訊協定連線到事件中樞。 您通常可以從應用程式使用事件中樞的 Kafka 端點,而不需要變更任何程式碼。 您只需修改設定,亦即,更新設定中的連接字串,以指向事件中樞所公開的 Kafka 端點,而非指向 Kafka 叢集。 然後,便可開始將事件從使用 Kafka 通訊協定的應用程式中串流到事件中樞,這相當於 Kafka 主題。
若要深入瞭解如何將 Kafka 應用程式遷移至 Azure 事件中樞,請參閱移轉指南。
注意
Kafka 生態系統的事件中樞支援 Apache Kafka 1.0 版及更新版本。
Apache Kafka 和 Azure 事件中樞的概念對應
概念上,Kafka 和事件中樞非常類似。 它們都是針對串流資料所建立的分割區記錄,在其中用戶端會控制要讀取的保留記錄檔部分。 下表提供 Kafka 與事件中樞之間的概念對應。
Kafka 概念 | 事件中樞概念 |
---|---|
叢集 | 命名空間 |
主題 | 事件中樞 |
資料分割 | 資料分割 |
消費者群組 | 消費者群組 |
Offset | Offset |
Azure 事件中樞支援的 Apache Kafka 功能
Kafka Streams
注意
Kafka Streams 目前處於進階和專用層的公開預覽狀態。
Kafka Streams 是適用於串流分析的用戶端程式庫,其為 Apache Kafka 開放原始碼專案的一部分,但與 Apache Kafka 事件代理程式不同。
Azure 事件中樞 支援 Kafka Streams 用戶端連結庫,並提供這裡提供的詳細數據和概念。
Azure 事件中樞客戶要求取得 Kafka Streams 支援的最常見原因,是因為他們對 Confluent 的 "ksqlDB" 產品有興趣。 "ksqlDB" 是一項專屬的共用原始碼專案,其授權使得「提供軟體即服務、平台即服務、基礎結構即服務,或與 Confluent 產品或服務競爭的其他類似線上服務」的任何廠商不被允許使用或提供 "ksqlDB" 支援。 實際上,如果您使用 ksqlDB,您必須自行操作 Kafka,否則您必須使用 Confluent 的雲端供應項目。 授權條款可能也會影響針對授權所排除的目的提供服務的 Azure 客戶。
獨立且不含 ksqlDB,Kafka Streams 的功能比許多替代架構和服務更少,其中大部分都有內建的串流 SQL 介面,且全都與現今的 Azure 事件中樞整合:
- Azure 串流分析
- Azure Synapse Analytics (透過事件中樞擷取)
- Azure Databricks
- Apache Samza
- Apache Storm
- Apache Spark
- Apache Flink
- AKS 上的 HDInsight 上的 Apache Flink
- Akka Streams
Kafka 交易
注意
Kafka 交易目前處於 Premium 和專用層的公開預覽狀態。
Azure 事件中樞 支援 Kafka 交易。 如需有關支援和概念的詳細數據,請參閱 這裡
壓縮
注意
目前,僅進階層和專用層支援事件中樞的 Kafka 壓縮。
Apache Kafka 用戶端中的用戶端 壓縮 功能會藉由將一批多則訊息壓縮成生產者端的單一訊息,並在取用者端解壓縮批次,以節省計算資源和頻寬。 Apache Kafka 訊息代理程式會將批次視為特殊訊息。
Kafka 生產者應用程式開發人員可以藉由設定壓縮類型屬性來啟用訊息壓縮。 Azure 事件中樞目前支援 gzip
壓縮。
Compression.type = none | gzip
雖然此功能僅支援 Apache Kafka 流量產生者和取用者流量,但 AMQP 取用者可以使用壓縮的 Kafka 流量作為解壓縮的訊息。
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 事件中樞的核心原則之一是傳遞至少一次的概念。 此方法可確保一律傳遞事件。 這也表示函式等取用者可以多次,甚至重複接收事件。 因此,取用者必須支援冪等取用者模式。
下一步
本文概略介紹了適用於 Kafka 的事件中樞。 若要深入了解,請參閱適用於 Azure 事件中樞的 Apache Kafka 開發人員指南。
如需具有建立事件中樞並使用 SAS 或 OAuth 進行存取的逐步指示教學課程,請參閱快速入門:使用 Kafka 通訊協定透過事件中樞的資料串流。
此外,請參閱 GitHub 上的 OAuth 範例。