核心内容摘要
探索粉色ABB苏州晶体:解锁ISO结构的无限可能
Flink 配置加载机制你改了文件但没生效很可能就卡在这里Flink 会在Flink 进程启动时解析配置JobManager / TaskManager / HistoryServer 等进程启动时加载。
所以改 config.yaml 之后必须重启相关进程才会生效仅靠“刷新 Web UI / 重提作业”通常不会重新加载 conf 里的配置还有几个常见入口默认读取$FLINK_HOME/conf/config.yaml可以用环境变量指定配置目录FLINK_CONF_DIR/path/to/confDocker 部署可以用FLINK_PROPERTIES注入配置注意不是所有部署模式都支持“复制 conf 目录做 per-job 配置”
config.yaml 写法嵌套推荐 vs 扁平兼容
1 嵌套写法更像“配置树”restart-strategy:type:failure-ratefailure-rate:delay:1 sfailure-rate-interval:1 minmax-failures-per-interval:
1
2 扁平写法老习惯也能用restart-strategy.type:failure-raterestart-strategy.failure-rate.delay:1 srestart-strategy.failure-rate.failure-rate-interval:1 minrestart-strategy.failure-rate.max-failures-per-interval:1两者等价但注意一个非常关键的点某些配置例如env.java.home要求必须是扁平格式one-line key-value否则可能不按预期生效
YAML 值类型别再把一切都当字符串了config.yaml 支持 YAML
2 的核心类型最常用的你可以按下面记Booleantrue/false大小写都行Integer/Long/Float/Double正常数字写法MemorySize1536m、2g、100 mbDuration10 s、1 min、1 hList[a, b, c]或- aMap{k1: v1, k2: v2}或缩进形式字符串遇到特殊字符比如:、#、{}、[]、;等时优先加引号这是迁移后最常见的坑之一。
从 flink-conf.yaml 迁移到 config.yaml变化点与坑位清单
1 行为变化非常要命重复 key 不允许flink-conf.yaml允许重复取最后一个config.yaml直接报错进程启动失败无效配置不再被“悄悄忽略”flink-conf.yaml解析不了就当没看见config.yaml报错并终止加载注释规则更严格flink-conf.yaml一行里第一个#后面全算注释config.yaml只有#前面是空格或行首时才算注释否则#可能被当成字符串的一部分null 的表达更丰富可以留空也可以写null/Null/NULL/~
2 官方迁移脚本推荐走这条流程是把旧文件flink-conf.yaml放到conf/目录在$FLINK_HOME/下执行bin/migrate-config-file.sh它会生成新的conf/config.yaml注意因为旧解析器把所有值都当字符串迁移出来的很多值会带引号。
但 Flink 后续会按 ConfigOption 的类型再做转换通常没问题。
“基础必配”清单Standalone / Session 集群最常改的几类
1 Host Portrest.address/rest.port客户端/Web UI 连接 JobManager 用jobmanager.rpc.address/jobmanager.rpc.portTaskManager 找 JobManager 用非 HA 场景更关键各种*.bind-host、*.bind-port你要绑定到
0.
0.
0还是内网网卡就靠它
2 内存真正的性能开关入门建议先记住两条“总量”配置jobmanager.memory.process.sizetaskmanager.memory.process.size它们是“进程总内存”Flink 会在里面再切分 heap、off-heap、network、managed 等。
复杂作业默认值往往偏小容易吞吐上不去RocksDB 状态膨胀导致反复 GC/抖动checkpoint 慢、背压严重
3 并行度与 Slotstaskmanager.numberOfTaskSlots每个 TM 提供多少 slotparallelism.default没显式指定并行度时的默认值经验上想要隔离好多起 TM、每个 TM 少 slot想要资源利用率高少起 TM、每个 TM 多 slot但 JVM 内会更“热闹”互相影响更大
4 Checkpointing 默认值不给代码配也能兜底你可以在集群配置里给“默认 checkpoint 行为”state.backend.typehashmap / rocksdb / forstexecution.checkpointing.interval0 才启用execution.checkpointing.dircheckpoint 目录s3/hdfs/本地 fs URIexecution.checkpointing.savepoint-dirsavepoint 默认目录这套做法适合“平台化”业务方写作业时不一定每个都手动配置 checkpoint集群侧先兜住。
5 Web UI 行为web.submit.enable是否允许 UI 上传 jar 提交作业web.cancel.enable是否允许 UI cancel 作业web.upload.dir上传 jar 存储目录企业环境经常把web.submit.enable关掉只留 REST/CI 提交流程。
6 io.tmp.dirs别用系统临时目录糊弄io.tmp.dirs影响非常多本地落盘内容RocksDB 文件batch spill缓存 jar如果你用的是会被系统清理的临时目录可能导致一次“删缓存”引发一次“重恢复”性能直接跳水。
建议显式指到稳定磁盘目录并确保空间和 IO。
容错重启策略别让作业一挂就“瞬间去世”Flink 的重启策略由restart-strategy.type控制常用三种fixed-delay固定间隔重试failure-rate单位时间内失败次数限制exponential-delay指数退避checkpoint 开启时默认更倾向它一个偏稳健的示例failure-raterestart-strategy:type:failure-ratefailure-rate:delay:10 sfailure-rate-interval:5 minmax-failures-per-interval:3核心思路外部系统抖一下Kafka、ES、DB别把你作业直接判死刑但也别无限重启打爆依赖。
最容易踩爆集群的 8 个坑强烈建议收藏config.yaml出现重复 key直接启动失败YAML 字符串包含特殊字符没加引号解析失败或值被截断env.java.home用了嵌套写法可能不生效它要求扁平 key-valuerest.address没配但你又不是 HA外部根本连不上 UI/RESTtaskmanager.memory.process.size太小吞吐、checkpoint、RocksDB 全面受害taskmanager.numberOfTaskSlots乱配要么资源浪费要么 JVM 互相干扰严重checkpoint 目录不可达/权限不足作业跑着跑着突然 checkpoint 连续失败触发 failoverio.tmp.dirs放在会被清理的目录一次清理一次重灾难恢复
一份“能直接用”的 config.yaml 模板偏通用你可以拿这个做基线再按你环境改路径与内存# 基础连通rest.address:flink-jm-hostrest.port:8081jobmanager.rpc.address:flink-jm-hostjobmanager.rpc.port:6123# 资源与并行taskmanager.numberOfTaskSlots:4parallelism.default:4# 进程内存示例按机器改jobmanager.memory.process.size:2gtaskmanager.memory.process.size:8g# 临时目录强烈建议显式设置io.tmp.dirs:/data/flink/tmp# 状态与 checkpoint示例filesystem rocksdbstate.backend.type:rocksdbexecution.checkpointing.storage:filesystemexecution.checkpointing.dir:hdfs://namenode:8020/flink/checkpointsexecution.checkpointing.savepoint-dir:hdfs://namenode:8020/flink/savepointsexecution.checkpointing.interval:30 sexecution.checkpointing.timeout:10 minexecution.checkpointing.num-retained:3# 重启策略restart-strategy:type:exponential-delayexponential-delay:initial-backoff:5 smax-backoff:5 minbackoff-multiplier:
5jitter-factor:
0.