學(xué)習(xí)筆記20170601">【PMP】學(xué)習(xí)筆記20170601
929
2022-05-30
本文為初入Flink的學(xué)習(xí)筆記,是在學(xué)習(xí)過程中對Flink基礎(chǔ)知識的整理,具體學(xué)習(xí)內(nèi)容包括尚硅谷Flink大數(shù)據(jù)從入門到精通、Flink官方文檔以及[白話解析] Flink的Watermark機制等多個博客。
Flink是什么
Flink是一個框架和分布式處理引擎,用于對無界和有界數(shù)據(jù)流進行有狀態(tài)的計算,能夠部署在各種集群環(huán)境,對各種規(guī)模大小的數(shù)據(jù)進行快速的計算
數(shù)據(jù)流
數(shù)據(jù)流是指數(shù)據(jù)像水流一樣是連續(xù)不斷的
有界數(shù)據(jù)流
有界數(shù)據(jù)流定義了流的開始,也定義了流的結(jié)束;
有界數(shù)據(jù)流可以在攝取了所有數(shù)據(jù)后再進行計算
有界數(shù)據(jù)流所有數(shù)據(jù)可以被排序,所以不需要有序攝取
有界流處理通常被稱為批處理
無界數(shù)據(jù)流
無界數(shù)據(jù)流定義了流的開始,但沒有定義流的結(jié)束
無界數(shù)據(jù)流會無休止地產(chǎn)生數(shù)據(jù)
無界數(shù)據(jù)流得到數(shù)據(jù)必須持續(xù)處理,即數(shù)據(jù)被攝取后需要立即處理,不能等到所有數(shù)據(jù)都到達再處理,因為無界數(shù)據(jù)流的輸入是無限的,在任何時候都不會結(jié)束
處理無界數(shù)據(jù)流通常需要以特定的順序攝取時間,例如事件的發(fā)生順序,以便能過夠推斷結(jié)果的完整性
有狀態(tài)的計算
有狀態(tài)計算是指在程序計算過程中,在Flink內(nèi)部會存儲計算所產(chǎn)生的中間結(jié)果,并提供給后續(xù)計算使用
為什么需要使用Flink
因為在日常生活中的數(shù)據(jù)主要是流數(shù)據(jù),例如用于交通運輸業(yè)和環(huán)境等方面進行實時數(shù)據(jù)采集的傳感器、銀行中所進行的實時結(jié)算和實時異常檢測行為。這些應(yīng)用都需要對大量的實時數(shù)據(jù)進行及時的處理,希望具有低延時、高吞吐性。傳統(tǒng)對于該數(shù)據(jù)的處理一般是批處理,即將一批數(shù)據(jù)收集完成后再進行處理,這樣將會導(dǎo)致不能實時處理數(shù)據(jù),會造成較高的延時,影響實際的使用。而Flink則是進行流處理,即每到來一個數(shù)據(jù)就進行處理,無需積攢一 ?批進行處理,因此它具有較高的實時性和高吞吐性,能夠更好的滿足日常的需求。
Flink組成
Flink主要是由JobManager、TaskManager、ResourceManager和Dispatcher組成
JobManager
JobManager是控制一個應(yīng)用程序執(zhí)行的主進程,也就是說每個應(yīng)用程序都會被一個不同的JobManager所控制執(zhí)行
TaskManager
TaskManager是Flink中的工作進程。在Flink中會有多個TaskManager運行,每個TaskManager都會有一定數(shù)量的插槽(Slot)
ResourceManager
ResourceManager主要負責(zé)管理TaskManager的插槽slot
Dispatcher
Dispatcher可以跨作業(yè)運行,為應(yīng)用提供了REST接口,而且也提供了WebUI,用來方便展示和監(jiān)控作業(yè)的執(zhí)行信息
Flink的任務(wù)提交流程
當(dāng)一個任務(wù)被提交時,Dispatcher就會啟動,并將應(yīng)用交給一個JobManager進行處理
JobManager接收到任務(wù)后,會向ResourceManager申請執(zhí)行任務(wù)所需要的插槽(slot)資源
當(dāng)ResourceManager接收到JobManager申請插槽資源后,會啟動TaskManager
TaskManager會向ResourceManager注冊自己空閑的slot,ResourceManager會根據(jù)JobManager所請求的slot數(shù)量,向TaskManager發(fā)送提供slot的指令
TaskManager與JobManager直接進行通信,向JobManager提供slot
JobManager向TaskManager分配要在slot中執(zhí)行的任務(wù)
TaskManager和slot的關(guān)系
Flink中每一個TaskManager都是一個JVM進程,它可能會在獨立的線程上執(zhí)行一個或多個子任務(wù)。為了控制一個TaskManager能接收多個任 務(wù),TaskManager通過slot來進行控制。Slot時TaskManager的最小資源分配單位,一個TaskManager中有多少個slot就意味著能支持多少的并發(fā)處理
時間語義
Event Time:事件創(chuàng)建的時間,即事件在現(xiàn)實世界中發(fā)生的時間,通常由事件中的時間戳描述
Ingestion Time:數(shù)據(jù)進入Flink的時間,即Flink讀取數(shù)據(jù)源的時間
Processing Time:執(zhí)行操作算子的本地系統(tǒng)時間,與機器相關(guān),即數(shù)據(jù)流入到某個具體算子(消息被計算處理)時候相應(yīng)的系統(tǒng)時間,也就是Flink處理該事件時當(dāng)前系統(tǒng)時間
window類型
window用來將無界流切分成有界流,對于window在Flink中主要有以下兩種,即時間窗口和計數(shù)窗口
時間窗口
時間窗口顧名思義就是以時間來劃分窗口,時間窗口又分為以下三種,即滾動時間窗口、滑動時間窗口和會話時間窗口
滾動時間窗口
滾動窗口將依據(jù)固定的窗口長度對數(shù)據(jù)進行切分,窗口長度固定,沒有重疊。而且只有當(dāng)前一個窗口結(jié)束,下面一個窗口才會開始,每個數(shù)據(jù)只會被劃分到一個窗口中。例如:如果指定大小為5分鐘的滾動窗口,則將執(zhí)行當(dāng)前窗口,并且每5分鐘將啟動一個新窗口
滑動時間窗口
滑動窗口是由固定的窗口長度和滑動間隔組成,窗口每次只會滑動固定的距離。窗口之間會有重疊,一個數(shù)據(jù)可能會存在于多個窗口中。例如:可以使用窗口大小為10分鐘的窗口,滑動大小為5分鐘,這樣,每5分鐘會生成一個窗口,包含最后10分鐘到達的事件
會話窗口
會話窗口的窗口大小不固定,其窗口大小和數(shù)據(jù)相關(guān),只要在一段時間內(nèi)沒有接收到新的數(shù)據(jù),就會生成新的窗口
計數(shù)窗口
計數(shù)窗口與時間窗口類似,其與時間窗口的不同在于以數(shù)據(jù)的個數(shù)進行劃分,而不是以時間劃分,其主要分為滾動窗口和滑動窗口
EI企業(yè)智能 智能數(shù)據(jù) 數(shù)據(jù)湖探索 DLI
版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實的內(nèi)容,請聯(lián)系我們jiasou666@gmail.com 處理,核實后本網(wǎng)站將在24小時內(nèi)刪除侵權(quán)內(nèi)容。