1 Flink簡介
Flink是一個(gè)流式的分布式處理引擎,可以同時(shí)處理有界流和無界流,并可以運(yùn)行在常見的集群環(huán)境中灰追。
Flink常用的應(yīng)用場景有:
(1) 事件驅(qū)動(dòng)型應(yīng)用
(2) 數(shù)據(jù)分析型應(yīng)用
(3) 數(shù)據(jù)管道應(yīng)用:將數(shù)據(jù)進(jìn)行轉(zhuǎn)換后再遷移到其他的存儲(chǔ)系統(tǒng)
Flink 是一個(gè)針對流數(shù)據(jù)和批數(shù)據(jù)的分布式處理引擎递览。它主要是由 Java 代碼實(shí)現(xiàn)。目前主要還是依靠開源社區(qū)的貢獻(xiàn)而發(fā)展疯溺。對 Flink 而言论颅,其所要處理的主要場景就是流數(shù)據(jù),批數(shù)據(jù)只是流數(shù)據(jù)的一個(gè)極限特例而已囱嫩。再換句話說恃疯,F(xiàn)link 會(huì)把所有任務(wù)當(dāng)成流來處理,這也是其最大的特點(diǎn)墨闲。Flink 可以支持本地的快速迭代今妄,以及一些環(huán)形的迭代任務(wù)。并且 Flink 可以定制化內(nèi)存管理鸳碧。
Flink架構(gòu)
Flink的分布式執(zhí)行主要分成兩個(gè)重要進(jìn)程:master和worker盾鳞。當(dāng)一個(gè)Flink程序執(zhí)行時(shí),其有多個(gè)進(jìn)程參與該執(zhí)行過程瞻离,如:
Job Manager
Task Manager
Job Client
下面的流程圖顯示了Flink程序的執(zhí)行過程:
link應(yīng)用程序需要首先提交到Job Client腾仅,Job Client把該Job提交到Job Manager,Job Manager為該Job分配資源及執(zhí)行器套利,其會(huì)先分配需要的資源推励,當(dāng)資源分配完成后鹤耍,該任務(wù)會(huì)提交給每個(gè)Task Manager,其中一個(gè)接收該任務(wù)验辞,該Task Manager初始化一個(gè)線程來執(zhí)行稿黄。當(dāng)該執(zhí)行器就緒后,這個(gè)Task Manager向Job Manager持續(xù)上報(bào)該Job的變更狀態(tài)跌造。該Job有多種狀態(tài)杆怕,如:啟動(dòng),進(jìn)行中鼻听,結(jié)束财著。當(dāng)這個(gè)Job運(yùn)行結(jié)束時(shí),其結(jié)果會(huì)被發(fā)送回提交的client撑碴。
Task Manager
Task Manager是worker節(jié)點(diǎn)撑教。每個(gè)Task Manager上面可用的task slots決定了任務(wù)的并行執(zhí)行,這塊和Storm基本類似醉拓。
一個(gè)Task Manager會(huì)把其內(nèi)存平分到每個(gè)slot中伟姐,如一個(gè)Task Manager有四個(gè)slot,其會(huì)為每個(gè)分配25%的內(nèi)存亿卤。每個(gè)slot中又會(huì)有多個(gè)線程愤兵。每個(gè)slot中的線程運(yùn)行在同一JVM中,同一JVM中的任務(wù)共享TCP連接和心跳消息排吴。
Job Client
用于接收用戶提交的程序秆乳,并創(chuàng)建數(shù)據(jù)流,把該數(shù)據(jù)流提交給Job Manager钻哩。當(dāng)程序執(zhí)行完成后屹堰,job client把執(zhí)行結(jié)果返回給用戶
其轉(zhuǎn)換數(shù)據(jù)流類似下面流程:
數(shù)據(jù)流直接從source通過map操作是不需要進(jìn)行shuffle數(shù)據(jù)的,如果使用GroupBy操作街氢,則Flink需要重根據(jù)其key進(jìn)行重新分布以確保能得到正確的結(jié)果扯键,如下: