apache-flink - 在 Apache Flink 中处理数据后内存没有下降
问题描述
我正在使用广播处理函数来执行简单的模式匹配。我正在广播大约 60 种模式。进程完成后,内存不会下降,我在我的 flink 配置文件中使用垃圾收集设置env.java.opts = "-XX:+UseG1GC"
来执行 GC,但它也无法正常工作。但是在完成数据处理后会出现 CPU 百分比。我每 2 分钟进行一次检查点,我的 statebackend 是文件系统。下面是内存和CPU使用率的截图
解决方案
在您分享的图表中,我没有看到任何令人惊讶或有问题的地方。摄取模式后,BroadcastProcessFunction 的每个实例都将保存所有模式的副本——这样会消耗一些内存。
如果我理解正确,听起来情况是随着数据被处理以匹配这些模式,内存继续增加,直到 pod 因内存不足错误而崩溃。各种因素可能会解释这一点:
如果您的模式涉及随着时间的推移匹配一系列事件,那么您的模式匹配引擎必须为每个部分匹配保留状态。如果没有超时子句来确保最终清除部分匹配,这可能会导致组合爆炸。
如果您正在执行密钥分区处理并且您的密钥空间是无限的,那么您可能会保留陈旧密钥的状态。
文件系统状态后端有相当大的开销。您可能低估了它需要多少内存。
推荐阅读
- python - 为什么 Cloudinary 上的图像不显示?
- python - Python 列表按键查找值
- vue.js - 在vue中成功保存数据时的成功消息
- c++ - 为什么 C++ 标准为 cv 限定符定义部分排序?
- python - sqlalchemy 无法连接到 '127.0.0.1' 上的 MYSQL 服务器
- shopify - 检查购物车中的产品是否有变体
- php - 如何使用 woocommerce_form_field() 在单选标签文本中显示 html 标签?
- python - 如何使用 python re 来描述这个?
- reactjs - 复制功能组件的最终状态
- node.js - Discord.js 获取所有当前公会在线成员用户名