事件流處理 (ESP) 與 Kafka 簡介
讓我們從一個場景開始,以建立對我們討論主題的基本理解。現在大多數人都熟悉的是“忠誠度或獎勵計劃”。
顧客使用他們的信用卡/借記卡進行金融交易,購買雜貨、T恤、書籍...或者訂購度假時的航班和酒店房間...使用專用支付方式進行任何購買。
公司然后根據消費金額向顧客提供積分、里程、返現或福利。顧客可以使用這些積分/里程/返現/獎勵來獲得折扣、免費產品或會員特權。企業(yè)這樣做是為了激勵再次購買,并建立與顧客的信任。
圖像來源:tibco.com
什么是事件流處理 (ESP)? 那么,這是如何發(fā)生的?我的信用卡公司是如何將我花的每一美元與適當的費用類別匹配,然后向我授予我可以用來預訂酒店房間或機票的里程數的?這就是“事件流處理 (ESP)”發(fā)揮作用的地方。ESP是一種能夠處理持續(xù)數據流(事件流)的技術,一旦事件或變化發(fā)生,就能立即處理。通過處理單個數據點而不是整個批次,事件流處理平臺提供了一種架構,使軟件能夠理解、對事件作出反應,并在事件發(fā)生時運行。
ESP 平臺
讓我們從數據集成的角度來考慮這個過程,我們有一個從“源系統(tǒng)”開始的事件,其中包含有關新交易的數據,然后連接到“目標系統(tǒng)”,在那里事件變化被加載、分析和轉換成期望的結果。只需幾行代碼的簡單軟件可以執(zhí)行此操作:
圖像來源:Learn Apache Kafka for Beginners
隨著源系統(tǒng)和/或目標系統(tǒng)的數量增加,數據集成挑戰(zhàn)也增加了。
圖像來源:Learn Apache Kafka for Beginners
因此,正如您所看到的,集成變得并不容易。源系統(tǒng)和/或目標系統(tǒng)的數量越多,就需要建立越多的集成,使架構變得非常復雜。此外,每個源系統(tǒng)可能會因來自目標系統(tǒng)的請求和連接數量增加而負擔過重。每個集成還會涉及協(xié)議、數據格式、數據模式和演變方面的困難。
這就是事件流處理平臺的用武之地。正如我們上面討論的,ESP平臺提供了一種使軟件能夠理解、對事件作出反應并在事件發(fā)生時運行的架構。
什么是 Apache Kafka? — Kafka 是一種流行的事件流處理平臺。 與許多 ESP 平臺一樣,Kafka通過在源系統(tǒng)和目標系統(tǒng)之間引入解耦來解決數據集成挑戰(zhàn):
Apache Kafka將收集、分類和存儲來自源系統(tǒng)(例如網站、定價數據、金融交易、用戶互動等)的所有數據。這些源系統(tǒng)被稱為“生產者”,它們生成 Kafka 數據流。當目標系統(tǒng)需要接收數據時,它們只需從 Kafka 數據中提取數據。因此,目標系統(tǒng)被稱為“消費者”。Kafka現在位于生成者接收數據和向消費者發(fā)送數據之間。
它是如何工作的?
Kafka的工作方式與消息隊列(例如 RabbitMQ)非常相似,但具有一些增強功能。Kafka有生產者和消費者的概念,正如前面討論過的。生產者將消息推送到Kafka,而接收者獲取它們。許多消息可能通過Kafka傳遞,因此為了區(qū)分它們并允許您隔離不同的處理上下文,Kafka將消息分組到“主題”中。
每個試圖發(fā)布某些內容的生產者都必須提供“主題名稱”。另一方面,消費者訂閱一組主題(可以同時有許多主題),然后從這些主題中獲取消息。
圖片來源:hevodata.com
總結一下,這些是關于Kafka的關鍵重要信息:
- 生產者將消息發(fā)布到隊列,消費者獲取它們進行處理。
- 消費者和生產者在一組被稱為主題的消息上工作。這使您能夠隔離不同類型的消息。
- 消費者分組成消費者組,允許您將工作負載分布到處于同一組的不同消費者實例中。
- 消費者是Java應用程序,可以擴展以提供更多(或更少)的處理能力。
- 每個主題分為分區(qū) —— 單獨的消息塊,具有一個分區(qū)內的順序保證??梢愿鶕枰渲梅謪^(qū)的數量。
- 每條消息由主題名稱、分區(qū)號和偏移量唯一標識。
- 偏移量是從主題和分區(qū)存在的開始位置的消息編號。
- 提交的偏移量是存儲在Kafka中的偏移量,用于在消費者崩潰或重新啟動后恢復處理。可以將其視為檢查點。
- 消費者位置是消費者內部使用的偏移量,用于跟蹤下一次輪詢時要獲取的消息。
為什么使用 Apache Kafka?
Kafka是一個開源項目。它具有分布式、彈性的架構,并且容忍故障(您可以對其進行修補和維護,而無需關閉整個系統(tǒng))。Kafka具有橫向擴展性。該項目旨在提供一個統(tǒng)一的、高吞吐量、低延遲(低于10毫秒)的平臺,用于處理實時數據流。
Kafka被許多組織(如Netflix、Uber、LinkedIn等)和IT團隊用作消息系統(tǒng)、活動跟蹤系統(tǒng)、流處理、微服務發(fā)布/訂閱、應用程序日志收集、度量數據收集、解耦系統(tǒng)依賴關系以及與其他大數據技術集成。
- Netflix使用Kafka實時應用建議,當用戶在他們的應用上觀看電視節(jié)目時。
- Uber使用Kafka實時收集用戶和行程數據,以計算和預測需求以及價格漲跌情況。這就是為什么您的Uber應用中相同行程的價格隨時都會發(fā)生變化。
Kafka是一個非??岬钠脚_。我們可以使用Docker輕松在您的筆記本電腦上設置單節(jié)點Kafka集群。