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
8final 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
12final 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