Flink中slot的一點理解
阿新 • • 發佈:2019-01-03
slot在flink裡面可以認為是資源組,Flink是通過將任務分成子任務並且將這些子任務分配到slot來並行執行程式。
每個Flink TaskManager在叢集中提供處理槽。 插槽的數量通常與每個TaskManager的可用CPU核心數成比例。一般情況下你的slot數是你每個TM的cpu的核數。
啟動Flink應用程式時,(在CLI情況下)使用者可以提供用於該作業的預設插槽數,通過-p來指定並行數。
./bin/flink run -p 10 ../examples/*WordCount-java*.jar
此外,在程式中可以通過env.setParallelism()來設定,此時設定的是整個程式的並行度。
final StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
env.setParallelism(3);
DataStream<String> text = [...]
DataStream<Tuple2<String, Integer>> wordCounts = [...]
wordCounts.print();
env.execute("Word Count Example");
當然我們也可以為單個操作符(Operator)設定程式設計API中的slot數目。
也可以在Flink的配置檔案裡面去設定這個值(flink-conf.yaml)final StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment(); DataStream<String> text = [...] DataStream<Tuple2<String, Integer>> wordCounts = text .flatMap(new LineSplitter()) .keyBy(0) .timeWindow(Time.seconds(5)) .sum(1).setParallelism(5); wordCounts.print(); env.execute("Word Count Example");
parallelism.default property
下面是一張來源於官網的圖,可以更加方便的幫我們理解slot
參考:https://ci.apache.org/projects/flink/flink-docs-release-1.3/setup/config.html#configuring-taskmanager-processing-slots
https://ci.apache.org/projects/flink/flink-docs-release-1.3/dev/parallel.html