Ch17_RunningTime
Yang Haoran 4/10/2021 FlinkJavaBigData
# RunningTime






map(new TweetKeyValue()).setParallelism(2);
1
也可以全局指定并行度。
env.setParallelism(4);
1
三个位置可以配置并行度
flink配置文件中
代码里
flink任务提交时
优先级:
代码>提交>配置文件
代码里算子单独设置优先级高于全局设置优先级
# 任务链
合理的设置并行度
- 减少本地通信的开销
- 减少序列化和反序列化
把多个算子合并为一个task,原本的算子成为里面的subtask
满足任务链需要以下条件:
- 算子具有相同并行度(具有相同的分区数)
- 算子属于one-to-one
one-to-one:stream维护着分区以及元素的顺序(比如source和map之间)。这意味着map 算子的子任务看到的元素的个数以及顺序跟 source 算子的子任务生产的元素的个数、顺序相同。map、fliter、flatMap等算子都是one-to-one的对应关系。
Redistributing:stream的分区会发生改变。每一个算子的子任务依据所选择的transformation发送数据到不同的目标任务。例如,keyBy 基于 hashCode 重分区、而 broadcast 和 rebalance 会随机重新分区,这些算子都会引起redistribute过程,而 redistribute 过程就类似于 Spark 中的 shuffle 过程。
并行度不同的算子之前传递数据会进行重分区,Redistributing类型的算子也会进行重分区。
当然还可以禁止掉合成任务链:
- 单个算子不参与合成任务链
.disableChaining()
1
- 从单个算子开启一个新的任务链
.startNewChain()
1
- 全局不合成任务链
env.disableOperatorChaining()
1
