资源与并行度
作业并行度应结合数据源分区数、下游吞吐能力、TaskManager 资源和任务槽数量设置,不建议无依据地将并行度调得过高。如果作业出现持续反压,应优先定位下游算子、外部写入端、数据倾斜和网络传输瓶颈,再调整并行度或资源。如果作业长时间处于空闲状态,应检查数据源是否有数据、分区分配是否均衡、过滤条件是否过严。
内存配置
容器化部署或 YARN 部署场景,建议优先配置进程总内存:
jobmanager.memory.process.size: 1024m
taskmanager.memory.process.size: 4096mStandalone 部署场景,可根据需要配置 Flink 总内存:
jobmanager.memory.flink.size: 1024m
taskmanager.memory.flink.size: 4096m说明
以上数值仅为示例,不是推荐固定值。实际值需要结合资源规格、作业状态大小、并发数、外部连接器内存使用和 JVM 开销评估。
Checkpoint 调优
生产流式作业建议开启 Checkpoint,并将 Checkpoint 目录配置到可靠的分布式存储。如果 Checkpoint 持续时间经常超过 Checkpoint 间隔,说明系统可能长期处于 Checkpoint 压力中。可适当增大 Checkpoint 间隔。
对状态较大的作业,可评估使用 RocksDB 状态后端和增量 Checkpoint,以降低单次 Checkpoint 的数据量。如果 Checkpoint 对齐时间较长,应结合 WebUI 的反压信息检查是否存在下游瓶颈、数据倾斜或网络问题。
以下示例适用于 Flink 1.20 的配置文件写法。示例值仅用于说明配置含义,实际值需要结合业务延迟要求、状态大小、存储性能和故障恢复目标调整。
# 状态后端类型。状态较大或需要降低 JVM Heap 压力时,可选择 rocksdb;状态较小且追求低延迟时,可评估 hashmap。
state.backend.type: rocksdb
# 是否启用增量 Checkpoint。启用后,每次 Checkpoint 尽量只持久化相对上一次 Checkpoint 的增量数据。该配置对支持增量 Checkpoint 的状态后端生效,常用于 RocksDB 状态后端。
execution.checkpointing.incremental: true
# Checkpoint 存储实现。生产环境建议使用 filesystem,并配合可靠的分布式文件系统或对象存储目录。
execution.checkpointing.storage: filesystem
# Checkpoint 存储目录。该目录必须能被 JobManager 和所有 TaskManager 访问。
execution.checkpointing.dir: hdfs:///flink/checkpoints
# Savepoint 默认存储目录。执行 stop with savepoint、作业升级或手动触发 Savepoint 时可使用该目录。
execution.checkpointing.savepoint-dir: hdfs:///flink/savepoints
# 作业取消时是否保留外部化 Checkpoint。
# RETAIN_ON_CANCELLATION 表示取消作业后保留 Checkpoint,便于需要时从保留的 Checkpoint 恢复;保留的数据需人工清理。
# DELETE_ON_CANCELLATION 表示取消作业时删除 Checkpoint。
execution.checkpointing.externalized-checkpoint-retention: RETAIN_ON_CANCELLATION
# JobManager 侧保留的已完成 Checkpoint 元数据数量。值越大,可查看和恢复的历史 Checkpoint 越多,但会增加元数据保留开销。
execution.checkpointing.num-retained: 5
# Checkpoint 触发间隔。间隔越短,故障后可回放的数据越少,但对状态存储和作业处理链路的压力越大。
execution.checkpointing.interval: 5 min
# Checkpoint 超时时间。超过该时间仍未完成的 Checkpoint 会失败。
execution.checkpointing.timeout: 10 min
# 可容忍的连续 Checkpoint 失败次数。超过该次数后,作业会按失败处理。不建议设置过大,否则可能掩盖存储不可用、反压严重等真实问题。
execution.checkpointing.tolerable-failed-checkpoints: 3
# Checkpoint 一致性语义。多数生产作业建议使用 EXACTLY_ONCE;只有在明确可接受重复处理且追求更低延迟时,才评估 AT_LEAST_ONCE。
execution.checkpointing.mode: EXACTLY_ONCE说明
Flink 1.20 版本中,`state.checkpoints.dir`、`state.savepoints.dir`、`state.checkpoints.num-retained` 和 `state.backend.incremental` 已有对应的新配置名,建议分别使用 `execution.checkpointing.dir`、`execution.checkpointing.savepoint-dir`、`execution.checkpointing.num-retained` 和 `execution.checkpointing.incremental`。
SQL 作业调优
维表 Join、窗口聚合、去重、Top-N 等作业容易产生较大状态,请提前评估状态规模和 Checkpoint 存储压力。