Apache Flink 配置文件详解

逐一详解 Apache Flink 1.19.1 的核心配置 flink-conf.yaml(JobManager/TaskManager 内存、并行度、端口、REST、Checkpoint/State、容错与权重),以及 workers/masters/flink-env.sh 与 SQL Client 配置。目标:让读者能正确配置与调优 Flink 流批作业。

Apache Flink大数据ApacheFlink参数调优OpenJDK消息队列与流处理流处理大数据与计算引擎批处理2026/09/29

Apache Flink 配置文件详解

目标:拆解 Apache Flink 1.19.1 的配置体系。Flink 配置集中在 conf/flink-conf.yaml(键=YAML式 key: value,集群启动时全局读取一次),外加 workers/masters 拓扑文件与 flink-env.sh(daemon JVM 环境)。了解每项才能在并行度、内存、容错上走对。

配置文件组织

文件用途
conf/flink-conf.yaml核心配置,JobManager 与 TaskManager 共享,启动时读取
conf/workers列出要启动 TaskManager 的主机(每行一个)
conf/masters列出 JobManager 主机与其 Web 端口
conf/flink-env.shdaemon 环境:JAVA_HOME、FLINK_HOME、FLINK_JVM_OPTS 等
conf/log4j2.properties / logback-console.xml日志输出(Hive 或 JSON 等格式)
conf/log4j-cli.propertiesflink 命令行的客户端日志
conf/sql-client-defaults.yamlSQL Client 默认连接/DDL(可选)

我们部署时实际追加的覆盖段:

jobmanager.rpc.address: node1
jobmanager.rpc.port: 6123
jobmanager.memory.process.size: 1600m
taskmanager.memory.process.size: 1536m
taskmanager.numberOfTaskSlots: 2
parallelism.default: 2
rest.address: node1
rest.port: 8090

1. JobManager 配置

键默认说明
jobmanager.rpc.addresslocalhostJobManager 的 RPC 主机名,TaskManager/客户端据此回连。多节点必须写成 node1(能被解析的主机名或 IP)
jobmanager.rpc.port6123JM 接收 RPC 的端口
jobmanager.memory.process.size1728mJM 进程总内存(堆+元空间+开overhead+网络)。不必设太大,JM 主要做调度不做算子计算
jobmanager.memory.heap.size依 processJM JVM 堆具体值,一般随 process 推算即可
jobmanager.execution.failover-strategyregion故障恢复粒度:region 只重启受影响 region / full 重启整作业

2. TaskManager 配置

键默认说明
taskmanager.memory.process.size1728mTM 进程总内存(分配时最重要的总开关)
taskmanager.numberOfTaskSlots1每个 TM 的槽位数,= 能并发执行的算子子任务数。并行度受"槽位总数"约束
taskmanager.data.port0TM 与 TM 数据传输端口。0=随机;生产固定一段(如 12345-12360)便于放防火墙
taskmanager.jvm-exit-on-oomfalseTM OOM 时是否让进程退出以便重启恢复
taskmanager.memory.network.min/max依 process网络缓冲内存区间,shuffle/checkpoint 传输多时可调

3. 内存模型(1.19 必须懂的三块)

taskmanager.memory.process.size 是包含一切的总内存,由源码响应式三段组成:

内存段简介
taskmanager.memory.framework.heap / taskmanager.memory.task.heap框架/算子的 JVM 堆内存
taskmanager.memory.managed.size / taskmanager.memory.task.off-heap.size托管内存(RocksDB state、排序缓冲区)与任务堆外
taskmanager.memory.jvm-overheadJVM 自身开销(线程栈、直接内存、GC)

调优口诀:别直接改 task.heap 死磕,先给 process.size 总量,再用 jvm-overhead/network 让框自动分配;任务堆不够再加 task.heap.size。

4. 并行度与执行

键默认说明
parallelism.default1默认并行度。实际并行度 = 槽位总数(本集群 2×2=4),算子可 setParallelism 覆盖
pipeline.operator-chainingtrue算子链(把相邻 operator 合并进同一 task)、默认开,降低调度开销

5. 容错与 Checkpoint(生产必配)

state.backend.type: rocksdb        # 显式存储后端(大状态)
state.checkpoints.dir: hdfs://node1:9000/flink/checkpoints
state.savepoints.dir:  hdfs://node1:9000/flink/savepoints
execution.checkpointing.interval: 60s
execution.checkpointing.mode: EXACTLY_ONCE
键默认说明
state.backend.typehashmap(自带)/rocksdb状态后端。大状态用 rocksdb(磁盘),小状态用内存 hashmap
state.checkpoints.dir空(默认 TM 本地,不可靠)Checkpoint 持久化目录,生产必须指到共享存储(如 HDFS)
state.savepoints.dir空Savepoint 目录(逻辑迁移/升级用,比 checkpoint 更独立)
execution.checkpointing.interval0(关闭)Checkpoint 触发间隔,0=关闭。至少间隔/最小暂停需结合
execution.checkpointing.modeEXACTLY_ONCE语义,流处理至少精确一次
execution.checkpointing.unalignedfalse非对齐 checkpoint(反压大时降低延迟),1.19 支持

6. REST 与 Web UI

键默认说明
rest.address自动REST 服务器绑定的地址,集群外访问需写成可路由的 node1
rest.port8081REST/Web UI 端口。被占用时改(本环境改 8090)
metrics.reporter.*-指标上报(Prometheus 等),可接入监控

二、workers / masters 详解

conf/workers:

node2
node3
  • start-cluster.sh 据此逐行 SSH 启动 TaskManager;stop-cluster.sh 逆序停止。
  • 扩容只需追加主机名,且该主机需已同步 Flink 目录 + node1→它免密。

conf/masters:

node1:8090
  • 第一列 JobManager 主机、第二列 Web 端口,start-cluster.sh 据此启动 standalonesession。
JAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64
FLINK_HOME=/opt/data/flink/flink-1.19.1-bin
FLINK_JVM_OPTS="--add-opens=java.base/java.lang=ALL-UNNAMED ..."   # 与 Hadoop/Kerberos 等 JAVA 反射时按需加
变量说明
JAVA_HOMEdaemon 与 bin/ 命令所需 JDK
FLINK_HOMEFlink 安装根,脚本自动定位
FLINK_JVM_OPTS传给所有 JM/TM JVM 的附加参数(如模块 opens、GC)
FLINK_ENV_JAVA_OPTS过去版本名称,1.19 以 FLINK_JVM_OPTS 为主

四、SQL 与日志配置(附)

  • sql-client-defaults.yaml:预置 SQL Client 的 catalog/source/sink/catalog 默认连接,便于 sql-client.sh 开箱连 Kafka、PG 等。
  • log4j2.properties:改 appender.file.fileName 可重定向日志文件;改 level 可打开 DEBUG。
  • 默认 JM/TM 日志位于 <FLINK_HOME>/log/flink--standalonesession-0-<host>.log 与 flink-*-taskexecutor-*-<host>.log,便于集中 grep。

调优建议汇总

  • 先定 process.size,再分堆:分别给 JM/TM 定总内存,让 framework/task/network/jvm-overhead 自动分配,别乱改单个 heap。
  • 并行度匹配槽位:parallelism.default 与 taskmanager.numberOfTaskSlots × TM 数 对齐,否则要么排队要么有机器闲置。
  • 生产必开 Checkpoint:配 state.backend.type=rocksdb + state.checkpoints.dir=<HDFS> + execution.checkpointing.interval,否则故障丢数据。
  • 端口与多实例:多 TM/多 JM 共机时固定 taskmanager.data.port 与 jobmanager.rpc.port 避开随机高端口冲突。
  • Java 17:对接 Hadoop/带反射的依赖时,在 FLINK_JVM_OPTS 加 --add-opens=java.base/java.lang=ALL-UNNAMED 等,避免 InaccessibleObjectException。

JVM 内存调优配置(实测)

本集群为低内存服务器(总内存有限),已对 Flink JobManager/TaskManager 进程内存总量做了调低并重启验证(2 TM / 4 slots)。

  • 配置文件:/opt/data/flink/flink-1.19.1-bin/conf/flink-conf.yaml
  • 改前值:jobmanager.memory.process.size: 1600m、taskmanager.memory.process.size: 1536m
  • 改后值:
    • jobmanager.memory.process.size: 512m
    • taskmanager.memory.process.size: 512m
  • 同步调小:jvm-metaspace 96m、jvm-overhead.min 64m、off-heap 32m;TM 侧另调 framework heap/off-heap 32m、network.min 16m、managed 0.25。

调低后 JM heap≈320m、RSS≈245 MB;TM heap≈165m、RSS≈251 MB。集群健康(2 TM / 4 slots,Checkpoint 等正常)。

参考链接

Apache Flink 配置文件详解 - Quzuo