- 基于flink-1.8.1
概述
- parallelism指的是并行度的意思。在 Flink 里面代表每個任務的并行度瞪醋,適當?shù)奶岣卟⑿卸瓤梢源蟠筇岣?job 的執(zhí)行效率,比如你的 job 消費 kafka 數(shù)據(jù)過慢矛物,適當調(diào)大可能就消費正常了霹琼。
- slot指的是插槽的意思,flink中任務的并行性由每個 Task Manager 上可用的 slot 決定丰嘉。
如何設置flink job的parallelism
- 在flink的配置文件中
flink-conf.yaml
夯到,默認的并行度為1; - 在以shell的方式提交flink job的時候饮亏,可以使用
-p
指定程序的并行度耍贾;
./bin/flink run -p 10 ../word-count.jar
- 在flink job程序內(nèi)設置并行度
StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
env.setParallelism(10);
注意:這樣設置的并行度是你整個程序的并行度,那么后面如果你的每個算子不單獨設置并行度覆蓋的話路幸,那么后面每個算子的并行度就都是這里設置的并行度的值了荐开。
- 每個算子指定并行度;
data.keyBy(new xxxKey())
.flatMap(new XxxFlatMapFunction()).setParallelism(5)
.map(new XxxMapFunction).setParallelism(5)
.addSink(new XxxSink()).setParallelism(1)
- 并行度設置優(yōu)先級是:算子設置并行度 > env 設置并行度 > 配置文件默認并行度
如何理解flink中的slot
- flink-conf.yaml中默認taskmanager.numberOfTaskSlots=1;
-
以flink架構模型為例進行分析:
flink-model.jpg - 圖中 Task Manager 是從 Job Manager 處接收需要部署的 Task简肴,任務的并行性由每個 Task Manager 上可用的 slot 決定晃听。每個任務代表分配給任務槽的一組資源,slot 在 Flink 里面可以認為是資源組砰识,F(xiàn)link 將每個任務分成子任務并且將這些子任務分配到 slot 來并行執(zhí)行程序杂伟。
- 例如,如果 Task Manager 有四個 slot仍翰,那么它將為每個 slot 分配 25% 的內(nèi)存赫粥。 可以在一個 slot 中運行一個或多個線程。 同一 slot 中的線程共享相同的 JVM予借。 同一 JVM 中的任務共享 TCP 連接和心跳消息越平。Task Manager 的一個 Slot 代表一個可用線程,該線程具有固定的內(nèi)存灵迫,注意 Slot 只對內(nèi)存隔離秦叛,沒有對 CPU 隔離。默認情況下瀑粥,F(xiàn)link 允許子任務共享 Slot挣跋,即使它們是不同 task 的 subtask,只要它們來自相同的 job狞换。這種共享可以有更好的資源利用率避咆。
-
以官網(wǎng)上的thread process為例說明一下
taskmanager.jpg - 上面圖片中有兩個 Task Manager舟肉,每個 Task Manager 有三個 slot,這樣我們的算子最大并行度那么就可以達到 6 個查库,在同一個 slot 里面可以執(zhí)行 1 至多個子任務路媚。
- 那么再看上面的圖片,source/map/keyby/window/apply 最大可以有 6 個并行度樊销,sink 只用了 1 個并行整慎。
- 每個 Flink TaskManager 在集群中提供 slot。 slot 的數(shù)量通常與每個 TaskManager 的可用 CPU 內(nèi)核數(shù)成比例围苫。一般情況下你的 slot 數(shù)是你每個 TaskManager 的 cpu 的核數(shù)裤园。
parallelism與slot的區(qū)別
-
1-slot 是指 taskmanager 的并發(fā)執(zhí)行能力;
slot-taskmanager.jpg - 如上圖所示:taskmanager.numberOfTaskSlots:3剂府;即每一個 taskmanager 中的分配 3 個 TaskSlot, 3 個 taskmanager 一共有 9 個 TaskSlot比然。
-
2-parallelism 是指 taskmanager 實際使用的并發(fā)能力
parallelism-taskmanager.jpg - 如上圖所示:parallelism.default:1;即運行程序默認的并行度為 1周循,9 個 TaskSlot 只用了 1 個强法,有 8 個空閑。設置合適的并行度才能提高效率湾笛。
-
3-parallelism 是可配置饮怯、可指定的;
example-1.jpg -
上圖中 example2 每個算子設置的并行度是 2嚎研, example3 每個算子設置的并行度是 9蓖墅。
example-4.jpg - example4 除了 sink 是設置的并行度為 1,其他算子設置的并行度都是 9临扮。