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