Flink 并行度详解
并行度的基本概念
在 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
并行度优先级
- 算子级别(最高)
- 环境级别(env.setParallelism())
- 客户端级别(-p 参数)
- 系统默认级别(flink-conf.yaml)
并行度与 Slot 的关系
- Slot 是静态资源概念,代表 TaskManager 的实际并发执行能力
- Parallelism 是动态执行概念,表示程序运行时实际使用的并发数量
- 总并行度不应超过集群 slot 总数
最佳实践
- 根据数据量设置合理的并行度
- 合理分配不同算子的并行度
- 考虑网络和 I/O 限制
- 批处理作业可设置较高并行度,流处理作业建议保持稳定的并行度