什麼是 Apache Kafka?
Apache Kafka是一個開放源代碼的分佈式發布 - 接收消息傳遞平台,該平台專門用於處理實時流數據,以進行分佈式流處理,流水線操作技術和重放數據饋送,以實現快速,可擴展的操作。
Kafka 是基於代理的解決方案,通過將數據流作為記錄保存在服務器集群中來進行操作。 Kafka 服務器可以跨越多個數據中心,並通過在主題中的多個服務器實例之間存儲記錄(消息)流來提供數據持久性。主題將記錄或消息存儲為一系列元組,一系列不可變的 Python 對象,這些對象由鍵,值和時間戳組成。
Apache Kafka 的用例
Apache Kafka 是當今市場上增長最快的開源消息傳遞解決方案之一。這主要是由於其體系結構設計模式,可為分佈式系統提供出色的日誌記錄機制。
Apache Kafka 專為實時日誌流而設計,非常適合有如下需求的應用程序:
- 不同組件之間可靠的數據交換
- 隨著應用程序需求的變化,可以對消息傳遞工作負載進行區分
- 實時流式傳輸以進行數據處理
- 原生支持數據/消息重播
Apache Kafka 的概念
主題:主題是發佈/接收消息傳遞中相當普遍的概念。在 Apache Kafka 和其他消息傳遞解決方案中,主題是一種可尋址的提取,用於表示對給定數據流(記錄/消息系列)的興趣。主題可以發佈和接收,並且是應用程序用來表示對給定數據流感興趣的提取層。
分區:在 Apache Kafka 中,主題可以細分為一系列稱為分區的順序隊列。這些分區被連續追加以形成順序提交日誌。在 Kafka 系統中,為每個記錄/消息分配了一個稱為偏移的順序 ID,該 ID 用於標識給定分區中的消息或記錄。
持久性: Apache Kafka 通過維護一組服務器來運無論消耗多少行,這些服務器在發布記錄/消息時會持久保存這些消息。 無論消耗多少,Kafka 群集使用可配置的保留超時來確定給定記錄的保留時間。當記錄/消息在保留超時之內,該記錄/消息可供使用。一旦記錄/消息超過此保留超時,記錄/消息將被刪除並釋放空間。
主題/分區縮放:由於 Apache Kafka 作為服務器集群運行,因此可以通過將負載分擔給定主題/分區上的每台服務器來縮放主題/分區。這種負載共享使 Kafka 群集中的每個服務器都能夠處理給定主題/分區上的記錄/消息的分佈和續編。當各個服務器處理所有分發和續編時,所有服務器都會複製數據,以在服務器發生故障時提供容錯能力和高可用性。在具有一台服務器當選為分區領導者的服務器與所有其他服務器作為跟隨器的服務器之間對分區進行分段。作為分區領導者的服務器處理所有數據的分發和續編,並且跟隨者提供複製服務以實現容錯能力。
生產者:在 Apache Kafka 中,生產者的概念與大多數消息傳遞系統沒有什麼不同。數據生產者(記錄/消息)定義了應在那個主題(數據流)上發佈給定的記錄/消息。由於使用分區來提供額外的可伸縮性,因此生產者還可以通過定義將記錄/消息發佈到給定的分區。生產者不必定義給定的分區,並且通過不定義分區,可以在主題分區之間實現輪詢式負載平衡。
消費者:與大多數郵件系統一樣,Kafka 中的消費者是處理記錄/消息的實體。可以將使用者配置為在單個工作負載上獨立工作,或者在給定的工作負載下與其他使用者協同工作(負載平衡)。使用者根據他們的使用者組名稱管理他們如何處理工作負載。利用使用者組名稱可以使使用者分佈在單個進程內,多個進程之間,甚至跨多個系統。利用使用者組名稱,使用者可以在整個使用者集中負載平衡(多個使用者俱有相同的使用者組名稱)記錄/消息消耗,或者可以唯一地處理每個記錄/消息(多個使用者俱有唯一的使用者組名稱),每個消費者都可以接收主題/分區獲取消息以進行處理。

Apache Kafka 的商業優勢
由於 Apache Kafka 旨在滿足其設計目標,因此具有一些明顯的優勢。Apache Kafka在設計時考慮了三個主要要求:
- 提供用於數據分發和使用的發佈/接收消息傳遞模型
- 允許長期存儲並可隨時間存取和重放的數據
- 支持實時存取數據的功能以提供實時流處理
這就是 Apache Kafka 真正的亮點所在。與某些消息傳遞系統不同,它沒有提供事務性或不同分發模型的所有信息。它專注於為支持流處理的發佈/接收模型提供數據分發。
其次,由於它是從頭開始提供長期數據存儲和數據重放的設計,因此 Apache Kafka 能夠以獨特的方式處理數據續編,容錯和重放。令人讚嘆的是,看到如何從 Apache Kafka 處理群集中數據複製的續編,通過允許跨分區共享數據以增加數據量和負載以及使用主題/分區,數據偏移量和使用者組名稱存取數據的可擴展性。
最後,因為 Apache Kafka 最初被設計為充當實時日誌處理的通信層,所以它自然地適合於實時流處理應用程序。這使得 Apache Kafka 非常適合利用可實時分發大量數據的通信基礎架構的應用程序。
無縫的消息傳遞和流傳輸功能:處理大量數據時,與傳統通信模型相比,消息傳遞在通信和可伸縮性方面有顯著優勢。通過融合消息傳遞和流功能,Apache Kafka 提供了獨特的實時發佈,接收,存儲和處理記錄的功能。
基於時間的數據保留以進行數據重放: Apache Kafka 能夠將數據持久地存儲到整個群集的磁盤中,從而提供了一種簡單的容錯方法。結合基於時限性的保留期來調用存儲的數據並基於順序的偏移量存取數據的功能,Apache Kafka 提供了一種在集群設置中進行數據儲存和檢索的穩健方法。
流處理的基本方法:能夠快速高效地移動數據是互連性的關鍵。 Apache Kafka 為無縫地移動數據(通過記錄,消息或流)提供了基礎。在可以檢查,轉換和利用數據之前,您需要能夠實時將數據從一個地方移動到另一個地方,並且 Apache Kafka 提供了一種原生方法來實時移動和存儲數據。
原生整合支持:千篇一律永遠不是一個好方法,Apache Kafka 通過使用 Connector API 整合點來提供原生的擴展和增長能力。使用 Apache Kafka Connector API,應用程式可以通過預先構建的連接器或開源工具與第三方解決方案,其他消息傳遞系統以及舊版應用程式整合,也可以根據應用程式的需要有目的地構建連接器。
將 Apache Kafka 付諸實踐
從實時消息分發到流事件,Apache Kafka 可用於多種應用程式類型,以支持事件驅動的體系結構。以一家製造公司為例,該公司正在轉向事件驅動的體系結構,以提供更多的自動化,跟踪以及更快的產品和服務交付。提供端到端事件驅動的體系結構需要許多組件,而通信是事件流式處理的基礎。 Apache Kafka 提供了一種理想的解決方案,可實現以輕量級分佈式進行數據分發和流式傳輸。使用 Apache Kafka,可以將過程記錄/消息流式傳輸到一個或多個應用程式中,從而在產品通過製造流程移動時驅動了額外的工作量。以相同的方式,當產品通過生產線進行處理時,可以生成並跟踪通知。與僅在流程結束時捕獲異常的手動流程相比,可以實時捕獲和處理異常。最後,通過詳細了解產品在製造過程中的位置以及產品的組裝,測試和交付方式,可以提供更好的消費者體驗。
所有這些改進的核心是, Apache Kafka 除了加快產品上市時間和降低成本外,還為數據分發和通信提供了一個中樞系統。