Flink并行度

并行执行

本节介绍如何在Flink中配置程序的并行执行。FLink程序由多个任务(转换/操作符、数据源和sinks)组成。任务被分成多个并行实例来执行,每个并行实例处理任务的输入数据的子集。任务的并行实例的数量称之为并行性。


如果要使用保存点,还应该考虑设置最大并行性(或最大并行性)。当从保存点还原时,可以改变特定运算符或整个程序的并行性,并且该设置指定并行性的上限。这是必需的,因为FLINK内部将状态划分为key-groups,并且我们不能拥有+INF的key-group数,因为这将对性能有害。

Flink中人物的并行度可以从多个不同层面设置:

1, 操作算子层面

2, 执行环境层面‘

3, 客户端层面

4, 系统层面

5,设置slots

操作算子层

操作算子,数据源,数据接收器等这些并行度都可以通过调用他们的setParallelism()方法置。例如

val env = StreamExecutionEnvironment.getExecutionEnvironment


val text = [...]

val wordCounts = text

   .flatMap{ _.split(" ") map { (_, 1) } }

   .keyBy(0)

   .timeWindow(Time.seconds(5))

   .

### 设置 Apache Flink 作业并行度的方法 Apache Flink 提供了多层级的配置方式来设置作业的并行度,以适应不同场景下的性能调优需求。默认情况下,Flink 会使用 `flink-conf.yaml` 中定义的并行度值,通常为: ```yaml parallelism.default: 1 ``` 该配置决定了在没有显式设置的情况下所有算子和作业的默认并行度[^1]。 #### 一、全局系统级别设置Flink 配置文件 `flink-conf.yaml` 中设置全局默认并行度是最基础的方式。此配置适用于整个 Flink 集群的所有作业: ```yaml parallelism.default: 4 ``` 该设置作为集群级别的兜底策略,在其他更细粒度的设置未指定时生效[^3]。 #### 二、执行环境级别设置 可以在程序中通过 `StreamExecutionEnvironment` 设置默认并行度,覆盖配置文件中的全局设置: ```java StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment(); env.setParallelism(4); ``` 这种方式适用于希望在整个作业中统一使用相同并行度的情况,同时可以被更细粒度的算子级设置覆盖[^3]。 #### 三、算子级别设置 为了实现更精细的资源控制和性能优化,Flink 支持在单个算子上设置并行度。例如: ```java env.fromElements("a", "b", "c") .map(x -> x) .setParallelism(2) .print(); ``` 这种设置方式优先级最高,适合用于对关键路径上的算子进行针对性优化,如 Kafka Source 的并行度建议设置为与 Kafka Topic 分区数一致,Keyed Window Aggregation 可适当提高并行度以提升吞吐量。 #### 四、客户端提交时动态设置 Flink 还支持在提交作业时通过命令行参数动态设置并行度,适用于多环境部署(开发、测试、生产): ```bash flink run -p 8 -c com.example.MyJob ./myjob.jar ``` 该方式在运行时决定并行度,常用于临时调整或自动化运维流程中。 #### 五、Flink SQL 中设置并行度 对于使用 Flink SQL 的用户,虽然 SQL 层本身不直接提供并行度设置语法,但可以通过底层 Table API 或者执行环境来控制。例如在 Java 中创建表环境时设置执行并行度: ```java StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment(); env.setParallelism(4); StreamTableEnvironment tEnv = StreamTableEnvironment.create(env); ``` 这样可以确保 SQL 查询中的各个操作符继承该并行度设置[^2]。 #### 六、调优建议 - **Kafka Source**:建议并行度等于 Kafka Topic 的分区数; - **Map / FlatMap**:根据 CPU 利用率合理设置; - **Keyed Window Aggregation**:可适当提高并行度以提升吞吐; - **Join / CoGroup**:视数据分布情况决定是否提高并行度; - **Sink**:若写入性能成为瓶颈,可适当增加 Sink 并行度; 此外,确保总并行度不超过集群总 Slot 数量,以避免资源争抢和调度开销过大。 ---
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值