1. 程式人生 > >Flink中slot的一點理解

Flink中slot的一點理解

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數目。

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");
也可以在Flink的配置檔案裡面去設定這個值(flink-conf.yaml)
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