首页 > 解决方案 > 在 Apache Flink 中处理数据后内存没有下降

问题描述

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

在此处输入图像描述

在此处输入图像描述

标签: apache-flinkflink-streaming

解决方案


在您分享的图表中,我没有看到任何令人惊讶或有问题的地方。摄取模式后,BroadcastProcessFunction 的每个实例都将保存所有模式的副本——这样会消耗一些内存。

如果我理解正确,听起来情况是随着数据被处理以匹配这些模式,内存继续增加,直到 pod 因内存不足错误而崩溃。各种因素可能会解释这一点:

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

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

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


推荐阅读