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.sh | daemon 环境:JAVA_HOME、FLINK_HOME、FLINK_JVM_OPTS 等 |
conf/log4j2.properties / logback-console.xml | 日志输出(Hive 或 JSON 等格式) |
conf/log4j-cli.properties | flink 命令行的客户端日志 |
conf/sql-client-defaults.yaml | SQL Client 默认连接/DDL(可选) |
一、flink-conf.yaml 核心项
我们部署时实际追加的覆盖段:
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.address | localhost | JobManager 的 RPC 主机名,TaskManager/客户端据此回连。多节点必须写成 node1(能被解析的主机名或 IP) |
jobmanager.rpc.port | 6123 | JM 接收 RPC 的端口 |
jobmanager.memory.process.size | 1728m | JM 进程总内存(堆+元空间+开overhead+网络)。不必设太大,JM 主要做调度不做算子计算 |
jobmanager.memory.heap.size | 依 process | JM JVM 堆具体值,一般随 process 推算即可 |
jobmanager.execution.failover-strategy | region | 故障恢复粒度:region 只重启受影响 region / full 重启整作业 |
2. TaskManager 配置
| 键 | 默认 | 说明 |
|---|---|---|
taskmanager.memory.process.size | 1728m | TM 进程总内存(分配时最重要的总开关) |
taskmanager.numberOfTaskSlots | 1 | 每个 TM 的槽位数,= 能并发执行的算子子任务数。并行度受"槽位总数"约束 |
taskmanager.data.port | 0 | TM 与 TM 数据传输端口。0=随机;生产固定一段(如 12345-12360)便于放防火墙 |
taskmanager.jvm-exit-on-oom | false | TM 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-overhead | JVM 自身开销(线程栈、直接内存、GC) |
调优口诀:别直接改
task.heap死磕,先给process.size总量,再用jvm-overhead/network让框自动分配;任务堆不够再加task.heap.size。
4. 并行度与执行
| 键 | 默认 | 说明 |
|---|---|---|
parallelism.default | 1 | 默认并行度。实际并行度 = 槽位总数(本集群 2×2=4),算子可 setParallelism 覆盖 |
pipeline.operator-chaining | true | 算子链(把相邻 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.type | hashmap(自带)/rocksdb | 状态后端。大状态用 rocksdb(磁盘),小状态用内存 hashmap |
state.checkpoints.dir | 空(默认 TM 本地,不可靠) | Checkpoint 持久化目录,生产必须指到共享存储(如 HDFS) |
state.savepoints.dir | 空 | Savepoint 目录(逻辑迁移/升级用,比 checkpoint 更独立) |
execution.checkpointing.interval | 0(关闭) | Checkpoint 触发间隔,0=关闭。至少间隔/最小暂停需结合 |
execution.checkpointing.mode | EXACTLY_ONCE | 语义,流处理至少精确一次 |
execution.checkpointing.unaligned | false | 非对齐 checkpoint(反压大时降低延迟),1.19 支持 |
6. REST 与 Web UI
| 键 | 默认 | 说明 |
|---|---|---|
rest.address | 自动 | REST 服务器绑定的地址,集群外访问需写成可路由的 node1 |
rest.port | 8081 | REST/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。
三、flink-env.sh 详解
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_HOME | daemon 与 bin/ 命令所需 JDK |
FLINK_HOME | Flink 安装根,脚本自动定位 |
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: 512mtaskmanager.memory.process.size: 512m
- 同步调小:jvm-metaspace
96m、jvm-overhead.min64m、off-heap32m;TM 侧另调 framework heap/off-heap32m、network.min16m、managed0.25。
调低后 JM heap≈320m、RSS≈245 MB;TM heap≈165m、RSS≈251 MB。集群健康(2 TM / 4 slots,Checkpoint 等正常)。
参考链接
- Flink Config 官方:https://nightlies.apache.org/flink/flink-docs-release-1.19/docs/deployment/config/
- 内存调优:https://nightlies.apache.org/flink/flink-docs-release-1.19/docs/deployment/memory/mem_tuning/
- 容错(Checkpoint):https://nightlies.apache.org/flink/flink-docs-release-1.19/docs/ops/state/checkpoints/
- 高可用:https://nightlies.apache.org/flink/flink-docs-release-1.19/docs/deployment/ha/overview/
章节目录