Bootstrap

Flink 常用问题及常用配置(有用)

一、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 MemoryCGroup 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内存监控,然后调整对应的内存资源分配。

;