前言
可以當做一個初步認識 Flink 的文章,
僅此而已?。。。。?/p>
我們以一個生產(chǎn)口罩的工廠為例來嘗試理解一下Flink的整個計算流程
工廠的老板 VS JobManager
老板都是復制整個工廠的整體把控的,
一般不親自動手,只需要管好 工廠的車間組長 就可以了。
JobManager 則是負責整個集群的資源管理與任務管理,
當然他不需要親自管理,一般都是交給 TaskManager。
工廠的車間組長 VS TaskManager
工廠的車間組長 也同樣還是不是具體做事的人,
只需要包控下自己車間的資源和進度 ,向老板報告。
車間組長管理著這個擁有若干的生產(chǎn)設備車間
并有一批可用的工人。
工人們可以選擇任意一個空閑的設備進行生產(chǎn)操作
TaskManager 負責當前節(jié)點上的任務運行及當前節(jié)點上的資源管理
并且將自己管理的內存資源劃分為一個個的 TaskSlot,
同時具有一定數(shù)量的 CPU 使用這些 TaskSlot
這些CPU可以共享所有的 TaskSlot 資源執(zhí)行任務
所以類似的我們可以:
設備 對于 TaskSlot
工人 對應 CPU
并且生產(chǎn)設備是可以在工人之間共享,
也就是雖然內存TaskSlot進行了隔離,
但是CPU是沒有進行隔離的
生產(chǎn)流程 VS Task
假設我們的生產(chǎn)口罩的流程分為:ABCD 四個流程
那么我們的每個設備都必須具備處理ABCD流程的能力
假設我們現(xiàn)在這個Flink 也具有 ABCD 四個Task。
也就是每個Task代表的都是一個處理流程。
這樣工廠的架子就搭起來了,
Flink集群也就是搭起來了,
現(xiàn)在只等數(shù)據(jù)進來,恩,等單子進來
生產(chǎn) VS SubTask
假設現(xiàn)在我們有個代理商幫忙銷售口罩,
每當他出售一個口罩,就會向工廠發(fā)送一個消息,
讓工廠生產(chǎn)一個口罩并發(fā)送到指定的客戶手上,
那么生產(chǎn)一個口罩的過程是怎么樣的呢?
我們知道口罩生產(chǎn)是要經(jīng)過ABCD四個步驟,
那么我們現(xiàn)在假設進行A步驟(Task)的生產(chǎn):
首先選定一個 設備(TaskSlot),指定一個工人(CPU,線程),
然后開始進行生產(chǎn),
這就是一個Subtask
當有很多訂單過來的時候,我們就可以把車間更多的設備和工人派出去執(zhí)行,
所以就會產(chǎn)生很多 Subtask。
當有任務執(zhí)行完成
當任何一個單子完成了A步驟就會緊接著進入BCD步驟,
直到最后完成口罩的生產(chǎn)。
并行度
一個設備一個坑,所以生產(chǎn)口罩的過程,
同時進行生產(chǎn)是由設備決定的...
而在Flink中,這個設定就是 Flink 的并行度,
一旦并行度設置超過 設備的數(shù)量,那就會產(chǎn)生問題,
達不到預想的效果,所以Flink會報錯。