微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

flink sql - 问题系列与解决系列集合

flink 任务物理内存溢出

报表信息:
Container [pid=12539,containerID=container_e166_1650382930878_534192_01_000014] is running 32768B beyond the ‘PHYSICAL’ memory limit. Current usage: 2.0 GB of 2 GB physical memory used; 4.1 GB of 4.2 GB virtual memory used. Killing container.
原因分析:
参考:https://developer.aliyun.com/article/780954

总结:
1、RocksDB Native 内存的不确定性,Flink 通过设置 RocksDB 的内存参数间接影响其内存使用。然而,目前 Flink 是通过估算得出这些参数,并不是非常精确的值。
2、glibc Thread Arena 问题【 64 MB 问题】
3、JDK8 Native 内存泄漏 , 建议升级jdk版本

不能完全解决,缓解方法
1、flink-conf.yaml添加参数:containerized.taskmanager.env.MALLOC_ARENA_MAX: 1
2、提高 Flink 的 JVM Overhead 分区容量【以下选一种即可

  1. jobmanager.memory.jvm-overhead.fraction:0.2
  2. taskmanager.memory.jvm-overhead.fraction:0.2
  3. jobmanager.memory.jvm-overhead.max/min:1gb
  4. taskmanager.memory.jvm-overhead.max/min:1 gb

flink ETL中当前日期无法再次触发当前日期函数计算

问题描述:flink etl sql 中使用了当前时间/日期 - 表记录中的某个时间/日期字段,若某个id的记录在历史时间已经被计算过,但是在今天或者每天再取这个时间的差值,实际上这个差值是少了记录时间到当前时间的时间差,会导致数据不一致。
解决 实际上,解决方法在问题描述中已经写出来了。新增记录计算时间,此时计算的日期差值没有问题,然后随着时间推移当前时间不断变化,然而flink etl 任务的当前时间还是历史的当前时间,不会再被触发计算【记录被修改除外】,此时需要使用**(当前时间 - 记录的计算时间) + 已计算好的日期差值 = 当前时间 - 记录日期的差值**

备注:后续会补充其他问题的解决方法

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐