Flink 开发生产问题汇总,亲自解决的才是最宝贵的

2024-05-02 07:38

本文主要是介绍Flink 开发生产问题汇总,亲自解决的才是最宝贵的,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

本文收集了与粉丝沟通过程中常见的问题与解决方案,整理成文,供大家参考和查阅。

1、Checkpoint失败:Checkpoint expired before completing

原因是因为

checkpointConf.setCheckpointTimeout(8000L)

设置的太小了,默认是10min,这里只设置了8sec。

当一个Flink App背压的时候(例如由外部组件异常引起),Barrier会流动的非常缓慢,导致Checkpoint时长飙升。

2、资源隔离建议

在Flink中,资源的隔离是通过Slot进行的,也就是说多个Slot会运行在同一个JVM中,这种隔离很弱,尤其对于生产环境。Flink App上线之前要在一个单独的Flink集群上进行测试,否则一个不稳定、存在问题的Flink App上线,很可能影响整个Flink集群上的App。

3、资源不足导致 container 被 kill
`The assigned slot container_container编号 was removed.`

Flink App 抛出此类异常,通过查看日志,一般就是某一个 Flink App 内存占用大,导致 TaskManager(在 Yarn 上就是 Container )被Kill 掉。

但是并不是所有的情况都是这个原因,还需要进一步看 yarn 的日志( 查看 yarn 任务日志:yarn logs -applicationId  -appOwner),如果代码写的没问题,就确实是资源不够了,其实 1G Slot 跑多个Task( Slot Group Share )其实挺容易出现的。

因此有两种选择,可以根据具体情况,权衡选择一个。

  • 将该 Flink App 调度在 Per Slot 内存更大的集群上。

  • 通过 slotSharingGroup("xxx") ,减少 Slot 中共享 Task 的个数

4、启动报错,提示找不到 jersey 的类
java.lang.NoClassDefFoundError: com/sun/jersey/core/util/FeaturesAndProperties

解决办法进入 yarn中 把 lib 目中的一下两个问价拷贝到 flink 的 lib 中

hadoop/share/hadoop/yarn/lib/jersey-client-1.9.jar /hadoop/share/hadoop/yarn/lib/jersey-core-1.9.jar

5、Scala版本冲突
java.lang.NoSuchMethodError:scala.collection.immutable.HashSet$.empty()Lscala/collection/

解决办法,添加

import org.apache.flink.api.scala._
6、没有使用回撤流报错
Table is not an append一only table. Use the toRetractStream() in order to handle add and retract messages.

这个是因为动态表不是 append-only 模式的,需要用 toRetractStream ( 回撤流) 处理就好了.

tableEnv.toRetractStream[Person](result).print()
7、OOM 问题解决思路
java.lang.OutOfMemoryError: GC overhead limit exceeded
java.lang.OutOfMemoryError: GC overhead limit exceededat java.util.Arrays.copyOfRange(Arrays.java:3664)at java.lang.String.<init>(String.java:207)at com.esotericsoftware.kryo.io.Input.readString(Input.java:466)at com.esotericsoftware.kryo.serializers.DefaultSerializers$StringSerializer.read(DefaultSerializers.java:177)
......at org.apache.flink.streaming.runtime.tasks.OperatorChain$CopyingChainingOutput.collect(OperatorChain.java:524)

解决方案:

  1. 检查 slot 槽位够不够或者 slot 分配的数量有没有生效

  2. 程序起的并行是否都正常分配了(会有这样的情况出现,假如 5 个并行,但是只有 2 个在几点上生效了,另外 3 个没有数据流动)

  3. 检查flink程序有没有数据倾斜,可以通过 flink 的 ui 界面查看每个分区子节点处理的数据量

8、解析返回值类型失败报错
The return type of function could not be determined automatically
Exception in thread "main" org.apache.flink.api.common.functions.InvalidTypesException: The return type of function 'main(RemoteEnvironmentTest.java:27)' could not be determined automatically, due to type erasure. You can give type information hints by using the returns(...) method on the result of the transformation call, or by letting your function implement the 'ResultTypeQueryable' interface.at org.apache.flink.api.java.DataSet.getType(DataSet.java:178)at org.apache.flink.api.java.DataSet.collect(DataSet.java:410)at org.apache.flink.api.java.DataSet.print(DataSet.java:1652)

解决方案:产生这种现象的原因一般是使用 lambda 表达式没有明确返回值类型,或者使用特使的数据结构 flink 无法解析其类型,这时候我们需要在方法的后面添加返回值类型,比如字符串

input.flatMap((Integer number, Collector<String> out) -> {......
})
// 提供返回值类型
.returns(Types.STRING)
9、Hadoop jar 包冲突
Caused by: java.io.IOException: The given file system URI (hdfs:///data/checkpoint-data/abtest) did not describe the authority (like for example HDFS NameNode address/port or S3 host). The attempt to use a configured default authority failed: Hadoop configuration did not contain an entry for the default file system ('fs.defaultFS').at org.apache.flink.runtime.fs.hdfs.HadoopFsFactory.create(HadoopFsFactory.java:135)at org.apache.flink.core.fs.FileSystem.getUnguardedFileSystem(FileSystem.java:399)at org.apache.flink.core.fs.FileSystem.get(FileSystem.java:318)at org.apache.flink.core.fs.Path.getFileSystem(Path.java:298)

解决:pom 文件中去掉和 hadoop 相关的依赖就好了

10、时钟不同步导致无法启动

启动Flink任务的时候报错

Caused by: java.lang.RuntimeException: Couldn't deploy Yarn cluster

然后仔细看发现里面有这么一句

system times on machines may be out of sync

意思说是机器上的系统时间可能不同步。同步集群机器时间即可。

这篇关于Flink 开发生产问题汇总,亲自解决的才是最宝贵的的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/953732

相关文章

关于redis一些问题记录

问题一:启动redis时出现警告,使用下列命令(已解决)       问题二:启动时,需要解决的警告(未解决)       问题三:使用自己的配置文件启动redis时,可能会遇到: Could not connect to Redis at 127.0.0.1:6379: Connection refused 原因:6379 没有断开,使用“exit”后,重新使用redis-c

selenium +java 多个类公用driver问题

问题点:太久没有写selenium代码,居然把driver公用的问题忘记了,即:每写一个测试类,执行过程中都会新建一个窗口,这样应该说是非常不专业的。 大概想了一个方法,虽然看起来也不怎么专业,但感觉能用就很开心了。 解决步骤:                1 创建一个获取获取driver的方法getDriver()                2 创建成员变量,将 getDriver()赋值

bimface开发实战-vue版

效果 演示地址 框架 bimface + vue3.0 代码地址 gitee地址 使用 yarn install yarn serve

listview在拖动的时候背景图片消失变成黑色背景的原因及解决方法

listview在拖动的时候背景图片消失变成黑色背景的原因是:当我们不拖动的时候确实是显示你自己定义的背景色,但是当我们拖动的时候就变黑了,这是为什么呢?   因为在没有设置下,listview的默认背景是和系统窗口一样的黑色,我们拖动的时候listview的默认颜色(我的是黑色)覆盖了你自己定义的背景色,所以才显示的是黑色,而不是你自己定义的颜色。我们只需要把listview的背景色改变或者透明

关于新版adt22.6.0的相关问题(自己总结)

首先说自己手贱的很,一不小心就更新了adt,导致现在各种问题频出。在网上找到了解决方案  在百度经验《 关于新版ADT创建项目时出现appcompat_v7的问题》!!!这个教程会告诉我们把appcompat_v7作为一个库项目,只有它点击 isLibrary,而你的项目千万不要点击islibrary,否则会在导出的时候出现There is no android project named xx

ant和解决Unable to locate tools.jar错误

首先说明 ant下载不用安装 直接解压缩即可,放到任意目录都可以,最好目录不包括中文 , 并且我出现的问题在于  我改了环境变量后,发现没有成功, 重启了一下命令行窗口,就直接成功了(这是让人最容易忽视的 因为就算你改成功了但是不重启 也会显示不成功)。 开始是显示Unable to locate tools.jar  Expected to find it in D:/Program File

服务器重启后网站不能访问(暂时解决)

只怪自己才疏学浅 systemctl stop firewalld.service #停止firewall systemctl disable firewalld.service #禁止firewall开机启动 我的解决方案就是:1.重新开启防火墙                                     2.再次关闭防火墙

ubuntu下安装coreseek出现的错误汇总

1.coreseek无法生成configure文件  [plain] view plain copy libstemmer_c/mkinc.mak:10: warning: source file 'runtime/utilities.c' is in a subdirectory,  libstemmer_c/mkinc.mak:10: but option 'sub

Linux删除大文件rm -rf的问题

请几天,我删除系统汇总的大文件,大约100G左右,当我使用rm -rf  xxxx.log删除后,使用df -h发现空间并未释放。 一开始以为是由于磁盘虚拟挂载,导致我删除的文件并不是当前目录的文件。但后来发现并不是。 我在网络上搜索发现都是  要: lsof | grep delete kill -9 xxx 但是我觉得这样不安全。 比如文件被进程锁定,或者有进程一直在向这个文件写数

剑指Offer面试题34题:丑数(Ugly Number)(while循环里面的三个小问题)

语言:C/C++语言 IDE:    Mac/Xcode  丑数:我们把只包含因子2、3、5的数称为丑数(Ugly Number),求按照从小到大的顺序的第1500个丑数。例如6、8都是丑数,但14不是,因为它包含因子7。习惯我们把1当做第一个丑数。 分析:所谓一个数m是另一个数n的因子,是指n%m==0。根据丑数的定义,丑数能被2,3,5整除,也就是一个数能连续的被2整除,或者连续的被3整