并行度的基本概念

在 Apache Flink 中,并行度(Parallelism)是指每个算子(Operator)在执行时可以同时运行的并行任务(Task)数量。Flink 程序的数据流图由多个算子组成(包括 Source、Transformation 和 Sink),每个算子都可以独立设置其并行度。

并行度的设置方式

1. 全局并行度设置:

env.setParallelism(4);

2. 算子级别并行度:

DataStream<String> data = env.addSource(new CustomSource())
    .map(new MyMapper()).setParallelism(2)
    .filter(new MyFilter()).setParallelism(3);

3. 配置文件设置 (flink-conf.yaml):

parallelism.default: 3

4. 客户端提交参数:

./bin/flink run -p 5 -c com.example.MyJob myJob.jar

并行度优先级

  1. 算子级别(最高)
  2. 环境级别(env.setParallelism())
  3. 客户端级别(-p 参数)
  4. 系统默认级别(flink-conf.yaml)

并行度与 Slot 的关系

  • Slot 是静态资源概念,代表 TaskManager 的实际并发执行能力
  • Parallelism 是动态执行概念,表示程序运行时实际使用的并发数量
  • 总并行度不应超过集群 slot 总数

最佳实践

  • 根据数据量设置合理的并行度
  • 合理分配不同算子的并行度
  • 考虑网络和 I/O 限制
  • 批处理作业可设置较高并行度,流处理作业建议保持稳定的并行度