一、Flink 常用问题及常用配置
|   参数  |   示例  |   说明  | 
|   execution.checkpointing.interval  |   3min  |   Checkpoint 触发间隔  | 
|   state.backend  |   rocksdb / filesystem  |   用于设置statebackend类型, 默认会以内存为statebackend(无法支持大状态)  | 
|   taskmanager.memory.jvm-overhead.max  |   2048m  |   如果使用rocksdb Statebackend可能会出现堆外内存超用导致container lost问题,配置此参数可避免出现该问题  | 
|   taskmanager.memory.jvm-overhead.fraction  |   0.2  |   默认是0.1 , 如果调整超过了1G,则需要调整taskmanager.memory.jvm-overhead.max, 增大max  | 
|   taskmanager.memory.managed.fraction  |   0.5  |   设置managed memory的内存使用比例  | 
|   taskmanager.memory.managed.size  |   2048m  |   设置managed memory的大小  | 
|   state.backend.rocksdb.memory.partitioned-index-filters  |   true  |   对RocksDB 的 partitioned Index 做了多级索引, 如果rocksdb的性能较差,可以尝试开启次参数进行优化  | 
|   state.checkpoint.fs.ignore-missing-file  |   false  |   当误删checkpoint导致作业无法启动时,通过设置该参数为true(默认false),使作业能够正常启动,仅在TM日志中记录一条异常(一般强烈建议不开启,可能会丢失状态,待出现该异常后再确定是否开启)  | 
|   state.backend.checkpoint.stream-concat-enabled  |   true  |   开启状态文件合并,减少状态文件的数量.  | 
|   env.java.opts.jobmanager=""  |   配置 jobManager jvm 参数  | |
|   env.java.opts.taskmanager=""  |   配置 taskmanager jvm 参数  | |
|   pipeline.operator-chaining  |   true  |   是否开启operator chain  | 
|   flink.log.level  |   info / debug  |   flink日志级别  | 
二、另外,CGroup内存和taskmanager heap 内存的区别
区别总结:
| 特性 | TaskManager Heap Memory | CGroup Memory | 
|---|---|---|
| 定义 | Flink 配置项 taskmanager.heap.size 设置的 JVM 堆内存 | 操作系统(Linux)通过 CGroup 限制的 总内存 | 
| 管理方式 | 由 JVM(Java) 内部的垃圾回收(GC)进行管理 | 由 Linux 内核 的 CGroup 进行管理 | 
| 配置位置 | Flink 配置文件中的 taskmanager.heap.size | 通过操作系统或容器配置(如 Docker 的 --memory) | 
| 内存类型 | 仅限于 JVM 堆内存 | 包括 堆内存、非堆内存、网络缓冲区等 | 
| 影响 | 影响 Flink 任务的内存分配和垃圾回收频率 | 控制整个 TaskManager 进程的内存使用限制 | 
| 资源限制 | 只影响 JVM 堆内存,不包括非堆内存 | 限制 TaskManager 进程的所有内存消耗,包括堆内存、非堆内存和其他内存 | 
| 超出限制时的处理 | 可能导致频繁的垃圾回收,影响性能 | 可能导致 OOM(Out of Memory)错误,TaskManager 崩溃 | 
结论:
taskmanager.heap.size主要影响 JVM 堆内存,它是 Flink 任务内存管理的一个核心部分。- CGroup 内存限制 是操作系统级别的限制,控制的是 TaskManager 进程的总体内存使用,包括堆内存、非堆内存以及其他类型的内存(例如网络缓冲区等)。CGroup 用于防止 TaskManager 因为内存使用过多而导致系统稳定性问题。
 
三、一般报错,报task manager was lost错误时:
task manager was lost只是现象,经常是内存OOM,container被kill掉了。具体是堆内内存不够还是堆外内存不够,需要具体看监控上的heap和cgroup内存监控,然后调整对应的内存资源分配。
