开发者社区 > 大数据与机器学习 > 实时计算 Flink > 正文

Flink这个问题怎么处理?

Flink这个问题怎么处理?我们线上任务里面可能有4-500个sql chain在一起提交,当一个tm failover恢复时,发现jobmanager内存猛增,dump内存发现是akka mailbox中消息过多,还有大量的excution,如果恢复完成能释放,有没有方法能收敛这部分内存,不然可能tm挂的越多,需要的jm内存越大

展开
收起
三分钟热度的鱼 2023-11-30 16:24:19 43 0
1 条回答
写回答
取消 提交回答
  • 面对过去,不要迷离;面对未来,不必彷徨;活在今天,你只要把自己完全展示给别人看。

    对于这个问题,可以尝试以下方法来处理 Flink 中 TM 失败恢复时 JobManager 内存增加的情况:

    1. 减少 TaskManager 的失败重启次数:根据描述,您提到在一个 TM 失败恢复期间可能会有大量的 SQL chain 重新提交。尽量减少 TM 失败的次数,通过优化集群环境、配置和监控等方式,降低故障发生的概率。

    2. 调整 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 的托管内存分配比例。

      注意:在调整这些配置参数之前,请确保您了解其含义和影响,并在测试环境中进行适当的验证。

    3. 减少并发任务数或拆分任务链:如果一个 Job 中有大量的 SQL chain 在一起提交,可以考虑减少并发任务数或将任务链拆分成多个较小的任务链。这样可以降低单次失败恢复时的内存压力。

    4. 定期清理无用状态:根据您的业务逻辑,可以在任务中定期清理不再需要的状态和数据。例如,在窗口计算中,及时清理过期的窗口数据,以减轻内存负担。

    5. 使用 RocksDB 状态后端:考虑将 Flink 的状态后端设置为 RocksDB,并配置适当的参数来优化状态大小和性能。RocksDB 可以更有效地管理状态数据,减少内存占用。

    2023-11-30 21:48:16
    赞同 展开评论 打赏

实时计算Flink版是阿里云提供的全托管Serverless Flink云服务,基于 Apache Flink 构建的企业级、高性能实时大数据处理系统。提供全托管版 Flink 集群和引擎,提高作业开发运维效率。

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载