【譯】Flink 應(yīng)用實(shí)踐

得益于其強(qiáng)大的可擴(kuò)展性,Apache Flink 在開(kāi)發(fā)并運(yùn)行各種不同類(lèi)型的應(yīng)用方面都是一個(gè)不錯(cuò)的選擇,這些特性包括:

  • 對(duì)流處理與批處理的支持
  • 復(fù)雜狀態(tài)管理
  • 事件-時(shí)間型的處理方法
  • 狀態(tài)的持續(xù)唯一性保證

不僅如此,F(xiàn)link 還可以部署在各種各樣的資源管理平臺(tái),如YARN、Apache Mesos 以及 Kubernetes,同時(shí)也支持在邏輯上獨(dú)立運(yùn)行為一個(gè)集群。即便是高可用方面,F(xiàn)link 也無(wú)可挑剔。事實(shí)證明,F(xiàn)link 可以擴(kuò)展到成千上萬(wàn)個(gè)內(nèi)核,處理TB量級(jí)的應(yīng)用狀態(tài),高吞吐,低時(shí)延,同時(shí)能夠hold得住世上大部分流處理應(yīng)用。
接下來(lái),我們會(huì)探索基于Flink 實(shí)現(xiàn)的最常見(jiàn)的幾種應(yīng)用,并給一些真實(shí)的案例。

  • 事件驅(qū)動(dòng)型應(yīng)用(Event-Driven Applications)
  • 數(shù)據(jù)分析型應(yīng)用(Data Analytics Applications)
  • 數(shù)據(jù)流水線型應(yīng)用(Data Pipeline Applications)

事件驅(qū)動(dòng)型應(yīng)用(Event-driven Applications)

什么是事件驅(qū)動(dòng)型應(yīng)用?

一個(gè)事件驅(qū)動(dòng)型應(yīng)用往往是一個(gè)有狀態(tài)的應(yīng)用,該應(yīng)用從一個(gè)或多個(gè)事件流源接受事件,并且通過(guò)進(jìn)行相應(yīng)的計(jì)算、狀態(tài)變更以及其他操作來(lái)對(duì)這些事件做出響應(yīng)。
相比傳統(tǒng)的應(yīng)用設(shè)計(jì),事件驅(qū)動(dòng)型應(yīng)用無(wú)疑是一個(gè)革命。在傳統(tǒng)場(chǎng)景中,計(jì)算和存儲(chǔ)是分開(kāi)的,應(yīng)用程序從遠(yuǎn)程事務(wù)數(shù)據(jù)庫(kù)讀取數(shù)據(jù)并將數(shù)據(jù)持久化到該數(shù)據(jù)庫(kù)。而事件驅(qū)動(dòng)型應(yīng)用恰恰相反,它基于一些有狀態(tài)的流處理應(yīng)用,數(shù)據(jù)和計(jì)算資源位于一處,從而可以實(shí)現(xiàn)本地?cái)?shù)據(jù)訪問(wèn)(從內(nèi)存或本地磁盤(pán))。在處理期間,會(huì)周期性的拉取本地狀態(tài)并同步寫(xiě)入遠(yuǎn)端一個(gè)位置來(lái)實(shí)現(xiàn)容錯(cuò)性這一特征。下面的圖表揭示了傳統(tǒng)型架構(gòu)與事件驅(qū)動(dòng)型應(yīng)用架構(gòu)的不同:


image

事件驅(qū)動(dòng)型應(yīng)用的好處?

高吞吐、低時(shí)延:相比傳統(tǒng)方式中先存到遠(yuǎn)程數(shù)據(jù)庫(kù),再讀取進(jìn)行處理,事件驅(qū)動(dòng)型應(yīng)用直接本地訪問(wèn)事件,并直接處理,從而帶來(lái)更好的表現(xiàn)。
容錯(cuò)性設(shè)計(jì):周期性檢查本地任務(wù)狀態(tài)并異步、增量地更新到遠(yuǎn)端持久層。因此,檢查點(diǎn)對(duì)常規(guī)事件處理的影響非常小。

事件驅(qū)動(dòng)型應(yīng)用的好處不僅是提供本地?cái)?shù)據(jù)訪問(wèn)這一點(diǎn),在傳統(tǒng)架構(gòu)中,多個(gè)應(yīng)用往往共享一個(gè)數(shù)據(jù)庫(kù)實(shí)例,因此每當(dāng)有數(shù)據(jù)結(jié)構(gòu)變更時(shí),其他服務(wù)往往都需要做一定的配合,或者實(shí)例擴(kuò)容情況出現(xiàn)時(shí),其他服務(wù)訪問(wèn)數(shù)據(jù)庫(kù)也會(huì)受到一定的性能影響。然而,本地化的數(shù)據(jù)訪問(wèn)模式,使得事件驅(qū)動(dòng)型應(yīng)用只需要負(fù)責(zé)自己的數(shù)據(jù)即可,數(shù)據(jù)結(jié)構(gòu)的變更以及本應(yīng)用的擴(kuò)容操作也只需要較少的協(xié)同操作。

Flink 是如何支持事件驅(qū)動(dòng)型應(yīng)用的?

事件驅(qū)動(dòng)應(yīng)用程序的限制由流處理器處理時(shí)間和狀態(tài)的能力來(lái)定義。Flink的許多突出特征都集中在這些概念上。Flink提供了一組豐富的狀態(tài)原語(yǔ),可以管理非常大的數(shù)據(jù)卷(最多可達(dá)幾TB),并且精確地保證了一致性。此外,F(xiàn)link支持事件時(shí)間、高度可定制的窗口邏輯和ProcessFunction提供的細(xì)粒度時(shí)間控制,從而實(shí)現(xiàn)了高級(jí)業(yè)務(wù)邏輯。此外,F(xiàn)link還提供了一個(gè)用于復(fù)雜事件處理(CEP)的庫(kù),用于檢測(cè)數(shù)據(jù)流中的模式。

然而,F(xiàn)link對(duì)于事件驅(qū)動(dòng)應(yīng)用程序的突出特性是savepoint。保存點(diǎn)是一個(gè)一致的狀態(tài)鏡像,可以用作兼容應(yīng)用程序的起點(diǎn)。給定一個(gè)保存點(diǎn),應(yīng)用程序可以更新或調(diào)整其規(guī)模,或者可以啟動(dòng)多個(gè)應(yīng)用程序版本以進(jìn)行A/B測(cè)試。

數(shù)據(jù)分析型應(yīng)用(Data-Analytics Applications)

什么是數(shù)據(jù)分析型應(yīng)用?

分析工作從源數(shù)據(jù)中抽取并洞察信息。在傳統(tǒng)架構(gòu)中,分析工作往往是基于一個(gè)有限的數(shù)據(jù)集來(lái)做批量查詢。如果想要得到最新數(shù)據(jù)的結(jié)果,需要不斷地把新數(shù)據(jù)增量加進(jìn)去再做分析工作。結(jié)果會(huì)寫(xiě)到存儲(chǔ)系統(tǒng)中,或者生成報(bào)告。
但是,借助一復(fù)雜流處理引擎,分析工作可以實(shí)時(shí)運(yùn)行。在這種模式下,應(yīng)用接收實(shí)時(shí)數(shù)據(jù),并且隨著新數(shù)據(jù)被消費(fèi),持續(xù)產(chǎn)生新的結(jié)果。這些結(jié)果要么寫(xiě)到一個(gè)外部數(shù)據(jù)庫(kù),要么以內(nèi)部狀態(tài)被維護(hù)起來(lái)。報(bào)表應(yīng)用可以直接從外部數(shù)據(jù)庫(kù)或者從本地應(yīng)用讀取最新的數(shù)據(jù)。Apache Flink 同時(shí)支持批處理分析以及流處理分析:


image

流分析應(yīng)用的好處是什么?

批處理架構(gòu)往往由幾個(gè)獨(dú)立的組件組成:

  • 周期性拉取數(shù)據(jù)
  • 執(zhí)行查詢操作

這些操作帶來(lái)了時(shí)間開(kāi)銷(xiāo),一旦某個(gè)環(huán)節(jié)出錯(cuò)就會(huì)影響整體。而基于復(fù)雜流處理引擎(如:Flink )的應(yīng)用把所有步驟合并到一起:數(shù)據(jù)抓取、持續(xù)結(jié)果計(jì)算,因此避開(kāi)了各出錯(cuò)環(huán)節(jié),同時(shí)可以依賴引擎的錯(cuò)誤恢復(fù)機(jī)制。

Flink 是如何支持?jǐn)?shù)據(jù)分析應(yīng)用型應(yīng)用的?

Flink 對(duì)持續(xù)的流處理以及批處理都支持得很好。具體來(lái)說(shuō),它具有一個(gè)符合ANSI標(biāo)準(zhǔn)的SQL接口,該接口具有用于批處理和流式查詢的統(tǒng)一語(yǔ)義。不管是查詢靜態(tài)事件記錄數(shù)據(jù)集,還是查詢實(shí)時(shí)事件流,該接口都能計(jì)算出相同的結(jié)果。豐富的自定義函數(shù)使得用戶能夠在SQL查詢中執(zhí)行自己的代碼。如果需要更加定制化的處理邏輯,F(xiàn)link 的DataStream API 或者DataSet API 也能夠提供初級(jí)的控制支持。此外,F(xiàn)link的Gelly庫(kù)為批量數(shù)據(jù)集的大規(guī)模和高性能圖形分析提供了算法和構(gòu)建塊。

數(shù)據(jù)流水線型應(yīng)用(Data Pipeline Applications)

什么是數(shù)據(jù)流水線?

ETL是一種常見(jiàn)的在不同存儲(chǔ)系統(tǒng)之間轉(zhuǎn)換、遷移數(shù)據(jù)的方法。通常來(lái)說(shuō),他的工作就是周期性的觸發(fā)數(shù)據(jù)拷貝動(dòng)作,從一個(gè)關(guān)系型數(shù)據(jù)庫(kù),到一個(gè)分析型數(shù)據(jù)庫(kù),或者數(shù)據(jù)倉(cāng)庫(kù)。
數(shù)據(jù)流水線跟ETL的目的是一樣的,都是在不同存儲(chǔ)系統(tǒng)之間轉(zhuǎn)換、加工、遷移數(shù)據(jù),然而他是以一種持續(xù)六的模式運(yùn)行,而不是周期性的觸發(fā),因此,它可以從那些持續(xù)產(chǎn)生數(shù)據(jù)的源讀取并遷移數(shù)據(jù),同時(shí)在較低時(shí)延的情況下寫(xiě)入另一個(gè)數(shù)據(jù)源。比如說(shuō),一個(gè)數(shù)據(jù)流水線可以監(jiān)控某個(gè)文件系統(tǒng)目錄中新文件的生成,并且將寫(xiě)入一個(gè)事件日志流內(nèi),另一個(gè)應(yīng)用就能基于此事件流實(shí)現(xiàn)一個(gè)增量型的文件搜索引擎。
下面的表格解釋了周期性ETL以及持續(xù)數(shù)據(jù)流水線應(yīng)用的區(qū)別:


image

數(shù)據(jù)流水線的好處是什么?

最明顯的一個(gè)好處就是低時(shí)延,其次,由于這種模式能夠持續(xù)的消費(fèi)并產(chǎn)生數(shù)據(jù),因此有更廣闊的應(yīng)用場(chǎng)景。

Flink 是如何支持?jǐn)?shù)據(jù)流水線的?

很多常見(jiàn)的數(shù)據(jù)轉(zhuǎn)換或者加工任務(wù)都可以通過(guò)Flink 的SQL接口來(lái)達(dá)成,它也支持自定義處理函數(shù)。用戶還可以使用DataStream PI來(lái)實(shí)現(xiàn)更高級(jí)的數(shù)據(jù)流水線需求。Flink 提供了相當(dāng)豐富的存儲(chǔ)系統(tǒng)連接器,如:Kafka、Kinesis、Elasticsearch以及JDBC數(shù)據(jù)庫(kù)系統(tǒng)。他也為那些監(jiān)控文件目錄的系統(tǒng)以及以時(shí)間桶形式寫(xiě)文件的系統(tǒng)提供持續(xù)的數(shù)據(jù)源支持。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容