Flink中的并行度是什么,如何设置?

Flink中的并行度指运行一个作业的TaskManager数量。通过增加并行度,可以在更多资源上运行一个Dataflow,从而提高处理吞吐量和缩短延迟。

在Flink中,我们可以通过以下方式设置并行度:

  1. 调用env.setParallelism()方法直接设置全局并行度。所有的算子会使用此并行度,除非单独设置。
  2. 对每个算子单独调用.setParallelism()方法设置其并行度。
  3. 不设置并行度,Flink会根据实际资源进行默认并行度设置。

下面通过例子来说明设置并行度的几种方式:

设置全局并行度:

StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
env.setParallelism(4);  // 设置全局并行度为4 

DataStream<String> stream = env.socketTextStream("localhost", 9999);  
stream.map(x -> x.toUpperCase()).print();  
// 两个算子都使用并行度4

单独设置算子并行度:

StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();

DataStream<String> stream = env.socketTextStream("localhost", 9999);  
stream.map(x -> x.toUpperCase()).setParallelism(2).print();  
// map算子并行度为2,print算子使用默认并行度

默认并行度:

StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();

DataStream<String> stream = env.socketTextStream("localhost", 9999);  
stream.map(x -> x.toUpperCase()).print();
// 两个算子并行度由Flink默认设置

env.setParallelism()和.setParallelism()是Flink中设置并行度的两种主要方式。