Apache flink 在ApacheFlink中进行数据处理后,内存不会下降

Apache flink 在ApacheFlink中进行数据处理后,内存不会下降,apache-flink,flink-streaming,Apache Flink,Flink Streaming,我正在使用broadcastprocess函数执行简单的模式匹配。我正在广播大约60种模式。进程完成后,内存不会下降,我正在使用flink配置文件env.java.opts=“-XX:+UseG1GC”中的垃圾收集设置来执行GC,但它也不工作。但CPU百分比在完成数据处理后出现。我每2分钟做一次检查点,我的状态后端是文件系统。下面是内存和CPU使用情况的屏幕截图 在您共享的图表中,我没有发现任何令人惊讶或有问题的地方。接收模式后,BroadcastProcessFunction的每个实例都将保

我正在使用broadcastprocess函数执行简单的模式匹配。我正在广播大约60种模式。进程完成后,内存不会下降,我正在使用flink配置文件
env.java.opts=“-XX:+UseG1GC”
中的垃圾收集设置来执行GC,但它也不工作。但CPU百分比在完成数据处理后出现。我每2分钟做一次检查点,我的状态后端是文件系统。下面是内存和CPU使用情况的屏幕截图


在您共享的图表中,我没有发现任何令人惊讶或有问题的地方。接收模式后,BroadcastProcessFunction的每个实例都将保留所有模式的一个副本,这样会消耗一些内存

如果我理解正确的话,听起来情况是,在处理数据以匹配这些模式时,内存会继续增加,直到POD崩溃并出现内存不足错误。各种因素可以解释这一点:

  • 如果您的模式涉及随着时间的推移匹配一系列事件,那么您的模式匹配引擎必须为每个部分匹配保持状态。如果没有超时子句来确保最终清除部分匹配,这可能会导致组合爆炸

  • 如果您正在进行密钥分区处理,并且您的密钥空间是无限的,那么您可能会保留过时密钥的状态

  • 文件系统状态后端有相当大的开销。您可能低估了它需要多少内存


澄清一下:图表显示的是唯一一个任务管理器的资源利用率?问题中的作业是已停止或取消的流式作业,还是仍在运行?@DavidAnderson感谢您的回复,该图是整个群集资源,但如果您看到50-75%之后的内存利用率,则模式匹配资源正在使用它。这里的问题是,它接收到的每一轮数据的内存都在增加,最终达到100%,POD将崩溃。处理数据后,内存不会下降。该图是一个正在运行的流作业。我没有在内存中保存事件,或者在我的用例中没有使用密钥分区处理。我正在接收简单的json对象,其中我正在寻找一个特定的json对象是否满足我的条件。我需要检查文件系统状态后端。如果您没有执行任何键控操作,那么状态后端可能不是问题所在。这是什么版本的Flink?我使用的是Flink版本1.10.0在错误修复版本1.10.1、1.10.2和1.10.3之间,总共修复了267个错误。我建议升级,看看是否有帮助。