使用 Apache Kafka 串流資料

已完成

Apache Kafka 是在 2010 年由 LinkedIn 所建立,其目標是在高容錯層級的極低延遲下,以非常高的規模移動資料。 LinkedIn 已在 2012 年將專案捐贈給 Apache Foundation,但 LinkedIn 仍在其整個生態系統中使用 Kafka 來追蹤使用者活動、交換訊息和收集計量。

Kafka 是一種分散式串流平台,其設計目的旨在:

  • 簡化資料管線
  • 以串流模式處理大量資料
  • 支援即時和批次系統
  • 水平大規模調整

首先,讓我們了解單純的 Apache Kafka,然後再了解 Azure HDInsight 上的 Kafka。

Kafka 元件

在了解 Kafka 的運作方式之前,讓我們先來看看一些 Kafka 主要元件的角色,以及它們如何搭配運作,以提供可高度調整且容錯的訊息系統。

Broker

Kafka 是叢集服務,而單一 Kafka 叢集也稱為訊息代理程式。 訊息代理程式會接收來自生產者的訊息,並將這些訊息儲存至磁碟。 訊息代理程式也會回應取用者的擷取要求。 在訊息代理程式的叢集內,一個訊息代理程式充當控制器以負責管理作業,並將分割區指派給訊息代理程式。

訊息

Kafka 叢集中的資料單位。 大部分執行個體中的訊息都是索引鍵/值組。

主題和分割區

主題和分割區是 Kafka 中的訊息類別。 主題通常會細分為多個分割區以輸送量,建議最少要有三個分割區。 訊息會以僅附加函式寫入至主題分割區。 分割區會在多個訊息代理程式之間進一步複寫,以在訊息代理程式失敗時改善備援。 分割區可讓您以平行方式讀取主題,因為這些主題可讓資料跨多個訊息代理程式進行分割。 有一個處理所有讀寫要求的 Leader (領導者) 複本,而 Followers (跟隨者) 會從 Leader 複寫。 如果 Leader 失敗,其中一個複本會變成 Leader。

生產者和取用者

生產者和取用者是從 Kafka 系統產生和取用訊息的用戶端。 生產者會發佈新的訊息,並將其導向至特定主題。 取用者也可以設計為寫入至特定的主題分割區。 接著,取用者可以訂閱一或多個主題,並從這些主題讀取訊息。

消費者群組

一或多個取用者可以當作群組一起運作,並以群組方式取用訊息。 如果取用者數目等於主題分割區的數目,則每個取用者都會從建立平行處理原則的單一主題分割區取用。

保留期

在預先定義的時段內,Kafka 中的訊息可以永久保留在 Kafka 叢集中。 在達到保留限制之後,Kafka 可能會過期並刪除這些訊息。

Offset

位移只是訊息在分割區中的位置。 在處理訊息時更新分割區中的目前位置,稱為「認可」。 在處理訊息之後,Kafka 會將訊息的位移認可到特殊的內部 Kafka 主題。 當生產者將訊息發佈至分割區時,此訊息會轉送到領導者。 Leader 會將訊息新增至認可記錄,並遞增訊息位移。 訊息位移是在主題內識別訊息的方式。 只在訊息認可至叢集之後,取用者才能使用此訊息。

Zookeeper

Zookeeper 是一種協調服務,在 Kafka 叢集中,Zookeeper 會提供叢集狀態的同步檢視。 Kafka 會使用 Zookeeper,在訊息代理程式和主題分割區之間進行 Leader 選擇。 Kafka 會使用 Zookeeper,為構成叢集的 Kafka 代理程式管理其服務探索。 Zookeeper 會將拓撲的變更傳送至 Kafka,因此叢集中的每個節點都會知道新的訊息代理程式何時加入、訊息代理程式何時終止、主題何時移除或主題何時新增。

這一切如何整合在一起?

應用程式 (也稱為生產者) 將訊息傳送至 Kafka 訊息代理程式,而且這些訊息是由一或多個取用者處理。 叢集中的訊息會依主題分類。 例如,客戶可以建立「銷售」主題,以傳送與銷售等相關的所有訊息。 當主題的大小隨著訊息增加而增長時,主題會分割成多個分割區,而且這些分割區會進一步跨 Kafka 代理程式進行複寫以取得備援。 分割區會分類為 Leader 和 Follower。 當 Follower 分割區只是複本時,Leader 分割區是寫入目標和讀取來源,因而可以掌握 Leader 的狀態。 若要判斷要寫入和讀取哪個分割區,生產者和取用者需要知道哪些分割區是設計的 Leader。 Zookeeper 節點會管理 Kafka 叢集的狀態,也會選擇分割區 Leader,並將此資訊提供給生產者和取用者。
Kafka 保證具有分割區的訊息會依照其進入的相同順序排序。 特定訊息可透過其位移 (即其在分割區內的位置) 來明確識別。 取用者從分割區讀取訊息並進行後置處理,然後認可指出訊息已成功處理的位移。 Kafka 會將其所有記錄儲存在磁碟上,並維護訊息持續性。 如果取用者由於某些原因而中斷且處理停止,則 Kafka 會將這些訊息保留預先決定的保留期間,而且在重新連線後,取用者可以從中斷之前其離開的認可位移重新啟動處理。

How Apache Kafka works

Kafka 主題

Kafka 主題是用來儲存和發佈訊息的摘要或佇列。 生產者會將訊息推送至主題,而取用者則會從主題中讀取訊息。 Kafka 訊息代理程式中的每個節點都可以包含多個主題。

Azure HDInsight 上的 Kafka 有哪些優點?

Kafka 的開放原始碼版本提供許多功能,但設定 Kafka 涉及許多工作。 Azure HDInsight 將最好的開放原始碼分析架構帶到 Azure 上,讓客戶可在幾分鐘內輕鬆地設定其開放原始碼叢集,而不需要花費數周或數個月的時間來設定這些叢集,而且您可以立即使用它們。 HDInsight 也符合企業使用,具有下列優點:

  • 它是一個受管理的服務,提供簡化的設定程序。 結果會是已經過測試且 Microsoft 支援的設定。
  • Microsoft 針對 Spark 和 Kafka 執行時間提供 99.9% 服務等級協定 (SLA)。
  • 它會使用 Azure 受控磁碟作為 Kafka 的備份存放區。 若有多個 Kafka 訊息代理程式,每個 Kafka 訊息代理程式的受控磁碟最多提供 16 TB 的儲存體。
  • HDInsight 利用 VNet、更細緻的 Apache Ranger 安全性,以及攜帶您自己的金鑰 (BYOK) 加密,為待用資料提供最佳的企業安全性
  • HIPAA、SOC 和 PCI 的合規性
  • 能夠透過相同 VNet 中的自動化 Azure Resource Manager (ARM) 範本,搭配 Spark 和儲存體來部署端對端串流管線。
  • 可以使用 Kafka MirrorMaker 來實現高可用性,從而可以取用主要叢集上主題中的記錄,然後在次要叢集上建立本機複本。
  • HDInsight 可讓您在叢集建立後,變更背景工作角色 (裝載 Kafka 訊息代理程式的節點) 的數目。 您可以從 Azure 入口網站、Azure PowerShell 及其他 Azure 管理介面執行調整。 對於 Kafka,您應該在調整作業完成後重新平衡資料分割複本。 重新平衡資料分割可讓 Kafka 利用新的背景工作角色節點數。
  • Azure 監視器記錄可用來監視 HDInsight 上的 Kafka。 Azure 監視器記錄會顯現虛擬機器層級資訊,例如磁碟和 NIC 計量,以及來自 Kafka 的 JMX 計量。