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