flink slot

slot在flink里面可以认为是资源组,Flink是通过将任务分成子任务并且将这些子任务分配到slot来并行执行程序。
每个Flink TaskManager在集群中提供处理槽。 插槽的数量通常与每个TaskManager的可用CPU内核数成比例。一般情况下你的slot数是你每个TM的cpu的核数。

1、启动Flink应用程序时,(在CLI情况下)用户可以提供用于该作业的默认插槽数,通过-p来指定并行数。

1
./bin/flink run -p 10 ../examples/*WordCount-java*.jar

2、在程序中可以通过env.setParallelism()来设定,此时设定的是整个程序的并行度

1
2
3
4
5
6
7
8
final StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
env.setParallelism(3);

DataStream<String> text = [...]
DataStream<Tuple2<String, Integer>> wordCounts = [...]
wordCounts.print();

env.execute("Word Count Example");

3、也可以为单个操作符(Operator)设置编程API中的slot数目

1
2
3
4
5
6
7
8
9
10
11
12
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");

4、可以在Flink的配置文件里面去设置这个值(flink-conf.yaml)

1
parallelism.default property

参考
https://blog.csdn.net/a6822342/article/details/77531000