1.事件流(Event streaming)
事件流是人體中樞神經系統的數字化的等價物。它是構建“始終在線”世界的技術基礎,在這個世界中,企業越來越多地被定義為軟件化和自動化,而軟件的用戶本身也是軟件。
從技術上講,事件流是從數據庫、傳感器、移動設備、云服務和軟件應用程序等事件源實時捕獲數據的做法,以事件流的形式;將這些事件流持久化存儲以供以后檢索;實時以及回顧性地操作、處理和響應事件流;并根據需要將事件流路由到不同的目標技術。因此,事件流確保了數據的持續流動和解釋,以便正確的信息在正確的地點,正確的時間可用。
2.事件流作用
事件流適用于各種用例,跨越眾多行業和組織。它的許多例子包括:
- 實時處理支付和金融交易,例如在證券交易所、銀行和保險公司。
- 實時跟蹤和監控汽車、卡車、車隊和貨物,例如在物流和汽車行業。
- 持續捕獲和分析來自IoT設備或其他設備的傳感器數據,例如在工廠和風力公園。
- 收集并立即響應客戶互動和訂單,例如在零售、酒店和旅游行業以及移動應用程序中。
- 在醫院護理中監測患者并預測病情變化,以確保在緊急情況下及時治療。
- 連接、存儲并使公司不同部門產生的數據可用。
- 作為數據平臺、事件驅動架構和微服務的基礎。
3.Kafka是一個事件流平臺意味著什么?
Kafka結合了三個關鍵能力,因此您可以使用一個經過實戰考驗的解決方案端到端實現您的事件流用例:
- 發布(寫入)和訂閱(讀取)事件流,包括從其他系統中持續導入/導出您的數據。
- 持久可靠地存儲事件流,只要您需要。
- 實時或回顧性地處理事件流。
所有這些功能都以分布式、高度可擴展、彈性、容錯和安全的方式提供。Kafka可以在裸機硬件、虛擬機上部署,也可以在容器中部署,在本地以及云中。您可以選擇自行管理Kafka環境或使用各種供應商提供的全托管服務。
4.Kafka如何運作?
Kafka是一個由服務器和客戶端組成的分布式系統,通過高性能的TCP網絡協議進行通信。它可以在本地硬件、虛擬機和容器上部署,在本地以及云環境中。
服務器: Kafka作為一臺或多臺服務器的集群運行,可以跨越多個數據中心或云區域。其中一些服務器形成存儲層,稱為代理。其他服務器運行Kafka Connect,以持續地將數據作為事件流導入和導出,將Kafka與您現有的系統集成,例如關系數據庫以及其他Kafka集群。為了讓您實現關鍵任務用例,Kafka集群具有高度的可擴展性和容錯性:如果任何服務器失敗,其他服務器將接管它們的工作,以確保不間斷的操作,而不會丟失任何數據。
客戶端: 它們允許您編寫分布式應用程序和微服務,以并行、大規模和容錯的方式讀取、寫入和處理事件流,即使在網絡問題或機器故障的情況下也是如此。Kafka隨附了一些這樣的客戶端,這些客戶端由Kafka社區提供的數十個客戶端增強:客戶端可用于Java和Scala,包括更高級別的Kafka Streams庫,適用于Go、Python、C/C++等許多其他編程語言,以及REST API。
5.主要概念和術語
事件記錄了“某事發生”的事實,無論是在世界還是您的業務中。它也稱為記錄或消息(Message)。當您讀取或寫入Kafka中的數據時,您是通過事件的形式進行的。概念上,一個事件有一個鍵、值、時間戳和可選的元數據頭。這里是一個示例事件:
- 事件鍵:“Alice”
- 事件值:“向Bob支付了200美元”
- 事件時間戳:“2020年6月25日下午2:06”
生產者(Producer)是發布(寫入)事件到Kafka的客戶端應用程序,消費者(Consumer)是訂閱(讀取和處理)這些事件的應用程序。在Kafka中,生產者和消費者是完全解耦的,并且彼此不知情,這是實現Kafka眾所周知的高可擴展性的關鍵設計元素。
例如,生產者永遠不需要等待消費者。Kafka提供了各種保證,例如能夠精確處理事件的能力。
事件被組織并持久地存儲在主題(Topic)中。非常簡化地說,主題類似于文件系統中的文件夾,事件是該文件夾中的文件。
一個示例主題名稱可能是“payments”。Kafka中的主題始終是多生產者和多訂閱者:一個主題可以有零、一個或多個生產者將事件寫入其中,以及零、一個或多個消費者訂閱這些事件。主題中的事件可以根據需要讀取盡可能多次 - 與傳統的消息系統不同,事件在消費后不會被刪除。相反,您通過每個主題的配置設置定義Kafka應該保留您的事件多長時間,之后舊的事件將被丟棄。Kafka的性能對于數據大小實際上是恒定的,因此長時間存儲數據完全沒有問題。
主題是分區(Partition)的,這意味著主題分布在位于不同Kafka代理上的“桶”上。
您的數據的分布式放置對于可擴展性非常重要,因為它允許客戶端應用程序同時從/向許多代理讀取和寫入數據。當發布到主題的新事件時,它實際上被追加到主題的某個分區中。具有相同事件鍵(例如,客戶或車輛ID)的事件被寫入到同一個分區中,并且Kafka保證任何給定主題-分區的消費者總是能夠按照它們被寫入的完全相同的順序讀取那些分區中的事件。
為了使您的數據具有容錯性和高可用性,每個主題都可以復制,甚至可以跨地理區域或數據中心復制,以便在出現問題、您想要對代理進行維護等情況下,始終有多個代理擁有數據的副本。一個常見的生產設置是3的復制因子,即,您的數據將始終有三份副本。這種復制是在主題-分區級別上執行的。