state.backend=rocksdb
state.backend.incremental: true
1.2.3 调大 checkpointInterval间隔:900000(15min),调大的主要目的减少快照的资源消耗。
2.1排查过程:这个报错非常具有迷惑性,一开始看到报错后便调大了set table.exec.state.ttl
的值
这个参数,但是依然报错,后来把值设为0(这意味着它永远不会清除状态),这个报错依然持续。
查阅flink1.14.3源码发现,该报错是动态表在更新时,回撤流无法找到对应主键导致的,这个也是flink非确定性更新(NDU)问题,这个问题也会导致状态膨胀;排查发现flink sql中只在sink端指定了主键,未在source端指定主键。
2.2解决方案:source端和sink端都需要指定主键 PRIMARY KEY (id) NOT ENFORCED
3.1 排查过程:通过arthas的dashboard命令查看taskmanager jvm情况,发现jvm远小于taskmanager 进程的RES,且g1_eden_space占heap98%以上,而g1_old_gen只占1%左右,初步排除jvm无法回收老年代的问题;基本就是state backbend的问题,state backend 的内存回收不受flink控制。
3.2解决方案:
3.2.1 在flink-conf.yaml中调整RocksDB相关参数