Flink中的并行度指运行一个作业的TaskManager数量。通过增加并行度,可以在更多资源上运行一个Dataflow,从而提高处理吞吐量和缩短延迟。
在Flink中,我们可以通过以下方式设置并行度:
- 调用env.setParallelism()方法直接设置全局并行度。所有的算子会使用此并行度,除非单独设置。
- 对每个算子单独调用.setParallelism()方法设置其并行度。
- 不设置并行度,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中设置并行度的两种主要方式。