前言
可以當(dāng)做一個(gè)初步認(rèn)識(shí) Flink 的文章迂苛,
僅此而已M诰妗E铡M肿 !牧挣!
我們以一個(gè)生產(chǎn)口罩的工廠為例來(lái)嘗試?yán)斫庖幌翭link的整個(gè)計(jì)算流程
工廠的老板 VS JobManager
老板都是復(fù)制整個(gè)工廠的整體把控的急前,
一般不親自動(dòng)手,只需要管好 工廠的車間組長(zhǎng) 就可以了浸踩。
JobManager 則是負(fù)責(zé)整個(gè)集群的資源管理與任務(wù)管理叔汁,
當(dāng)然他不需要親自管理,一般都是交給 TaskManager检碗。
工廠的車間組長(zhǎng) VS TaskManager
工廠的車間組長(zhǎng) 也同樣還是不是具體做事的人据块,
只需要包控下自己車間的資源和進(jìn)度 ,向老板報(bào)告折剃。
車間組長(zhǎng)管理著這個(gè)擁有若干的生產(chǎn)設(shè)備車間
并有一批可用的工人另假。
工人們可以選擇任意一個(gè)空閑的設(shè)備進(jìn)行生產(chǎn)操作
TaskManager 負(fù)責(zé)當(dāng)前節(jié)點(diǎn)上的任務(wù)運(yùn)行及當(dāng)前節(jié)點(diǎn)上的資源管理
并且將自己管理的內(nèi)存資源劃分為一個(gè)個(gè)的 TaskSlot,
同時(shí)具有一定數(shù)量的 CPU 使用這些 TaskSlot
這些CPU可以共享所有的 TaskSlot 資源執(zhí)行任務(wù)
所以類似的我們可以:
設(shè)備 對(duì)于 TaskSlot
工人 對(duì)應(yīng) CPU
并且生產(chǎn)設(shè)備是可以在工人之間共享怕犁,
也就是雖然內(nèi)存TaskSlot進(jìn)行了隔離边篮,
但是CPU是沒(méi)有進(jìn)行隔離的
生產(chǎn)流程 VS Task
假設(shè)我們的生產(chǎn)口罩的流程分為:ABCD 四個(gè)流程
那么我們的每個(gè)設(shè)備都必須具備處理ABCD流程的能力
假設(shè)我們現(xiàn)在這個(gè)Flink 也具有 ABCD 四個(gè)Task。
也就是每個(gè)Task代表的都是一個(gè)處理流程奏甫。
這樣工廠的架子就搭起來(lái)了戈轿,
Flink集群也就是搭起來(lái)了,
現(xiàn)在只等數(shù)據(jù)進(jìn)來(lái)阵子,恩思杯,等單子進(jìn)來(lái)
生產(chǎn) VS SubTask
假設(shè)現(xiàn)在我們有個(gè)代理商幫忙銷售口罩,
每當(dāng)他出售一個(gè)口罩挠进,就會(huì)向工廠發(fā)送一個(gè)消息色乾,
讓工廠生產(chǎn)一個(gè)口罩并發(fā)送到指定的客戶手上,
那么生產(chǎn)一個(gè)口罩的過(guò)程是怎么樣的呢领突?
我們知道口罩生產(chǎn)是要經(jīng)過(guò)ABCD四個(gè)步驟暖璧,
那么我們現(xiàn)在假設(shè)進(jìn)行A步驟(Task)的生產(chǎn):
首先選定一個(gè) 設(shè)備(TaskSlot),指定一個(gè)工人(CPU君旦,線程)澎办,
然后開始進(jìn)行生產(chǎn)嘲碱,
這就是一個(gè)Subtask
當(dāng)有很多訂單過(guò)來(lái)的時(shí)候,我們就可以把車間更多的設(shè)備和工人派出去執(zhí)行浮驳,
所以就會(huì)產(chǎn)生很多 Subtask悍汛。
當(dāng)有任務(wù)執(zhí)行完成
當(dāng)任何一個(gè)單子完成了A步驟就會(huì)緊接著進(jìn)入BCD步驟,
直到最后完成口罩的生產(chǎn)至会。
并行度
一個(gè)設(shè)備一個(gè)坑,所以生產(chǎn)口罩的過(guò)程谱俭,
同時(shí)進(jìn)行生產(chǎn)是由設(shè)備決定的...
而在Flink中奉件,這個(gè)設(shè)定就是 Flink 的并行度,
一旦并行度設(shè)置超過(guò) 設(shè)備的數(shù)量昆著,那就會(huì)產(chǎn)生問(wèn)題县貌,
達(dá)不到預(yù)想的效果,所以Flink會(huì)報(bào)錯(cuò)凑懂。