Flink这个问题怎么处理?我们线上任务里面可能有4-500个sql chain在一起提交,当一个tm failover恢复时,发现jobmanager内存猛增,dump内存发现是akka mailbox中消息过多,还有大量的excution,如果恢复完成能释放,有没有方法能收敛这部分内存,不然可能tm挂的越多,需要的jm内存越大
对于这个问题,可以尝试以下方法来处理 Flink 中 TM 失败恢复时 JobManager 内存增加的情况:
减少 TaskManager 的失败重启次数:根据描述,您提到在一个 TM 失败恢复期间可能会有大量的 SQL chain 重新提交。尽量减少 TM 失败的次数,通过优化集群环境、配置和监控等方式,降低故障发生的概率。
调整 Flink 配置参数:可以调整一些与内存相关的 Flink 配置参数,以便在失败恢复期间能更好地管理内存使用。以下是一些可能需要注意的配置参数:
jobmanager.memory.process.size
: 增加 JobManager 进程的堆内存大小。taskmanager.memory.framework.off-heap.size
: 增加 TaskManager 使用的堆外内存大小。taskmanager.memory.task.heap.size
: 增加每个 TaskManager 上的任务堆内存大小。taskmanager.memory.managed.fraction
: 调整 TaskManager 的托管内存分配比例。注意:在调整这些配置参数之前,请确保您了解其含义和影响,并在测试环境中进行适当的验证。
减少并发任务数或拆分任务链:如果一个 Job 中有大量的 SQL chain 在一起提交,可以考虑减少并发任务数或将任务链拆分成多个较小的任务链。这样可以降低单次失败恢复时的内存压力。
定期清理无用状态:根据您的业务逻辑,可以在任务中定期清理不再需要的状态和数据。例如,在窗口计算中,及时清理过期的窗口数据,以减轻内存负担。
使用 RocksDB 状态后端:考虑将 Flink 的状态后端设置为 RocksDB,并配置适当的参数来优化状态大小和性能。RocksDB 可以更有效地管理状态数据,减少内存占用。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
实时计算Flink版是阿里云提供的全托管Serverless Flink云服务,基于 Apache Flink 构建的企业级、高性能实时大数据处理系统。提供全托管版 Flink 集群和引擎,提高作业开发运维效率。