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

请教个 flink 跑批任务的问题 我们的集群跑在 k8s 上面,想请教下为什么会出现这种问题?

请教个 flink 跑批任务的问题

我们的集群跑在 k8s 上面,跑某些数据量大的批任务的时候几乎 100% 会失败,查原因都是某个 taskmanager 被 cgroup 杀掉了,看 gc 日志 heap 这些内存的占用并不高

想请教下为什么会出现这种问题? 有没有什么参数可以控制内存的使用?

展开
收起
真的很搞笑 2023-12-03 20:44:49 98 0
3 条回答
写回答
取消 提交回答
  • 是 你容器资源设置的事吧,cgroup 可以手动设置 cpu 内存 和 io啥的,此回答整理自钉群“【③群】Apache Flink China社区”

    2023-12-05 10:27:45
    赞同 展开评论 打赏
  • Flink任务在Kubernetes上运行,可能会因为资源管理或者其他原因导致TaskManager被cgroup杀掉。首先需要理解Flink的TaskManager内存模型。Flink框架不仅会包含JVM管理的Heap内存,还会申请自己管理Off-Heap的Native和Direct内存。

    对于内存的使用,您可以考虑以下建议:

    1. 配置Flink的总内存。可以通过调整taskmanager.memory.flink.sizejobmanager.memory.flink.size来控制Flink应用使用的内存大小。
    2. 如果遇到Metaspace不足的问题,可以适当调整JVM Metaspace的大小。
    3. 考虑Flink on Kubernetes的架构,确保Master和Worker的Container正确启动,并且TaskManager已经成功向ResourceManager注册。

    此外,为了更稳定地在Kubernetes上运行Flink任务,建议对Kubernetes、Container、Operator有一定的了解,并确保Flink能够顺利申请和释放资源。如果问题仍然存在,可以考虑查看Flink的日志和Kubernetes的资源使用情况,以便进一步定位问题。

    2023-12-04 16:15:04
    赞同 展开评论 打赏
  • 面对过去,不要迷离;面对未来,不必彷徨;活在今天,你只要把自己完全展示给别人看。

    您好,根据您描述的情况,Flink任务在k8s上运行,数据量大时经常失败,并且某个TaskManager被cgroup杀掉。这可能是由于资源不足导致的。以下是一些建议和可能的解决方案:

    1. 调整资源限制:您可以考虑增加TaskManager的资源限制,如CPU、内存等。这可以通过修改flink-conf.yaml文件中的相关参数来实现。例如,可以调整taskmanager.memory.process.size来控制每个TaskManager进程的内存使用量。

    2. 优化任务并行度:Task Slot是TaskManager的并发执行能力,而并行度parallelism是实际使用的并发能力。您可以通过调整taskmanager.numberOfTaskSlotsparallelism.default参数来优化这两者的配置,确保它们与您的任务需求相匹配。

    3. 查看TaskManager日志:当TaskManager挂掉时,首先要查看其日志,以确定具体的原因。可能的原因包括任务在180秒内没有被正常Cancel导致。

    4. 考虑Standalone集群模式:在Flink的standalone集群模式中,如果一个TaskManager挂掉,其上的任务会被平移到其他TaskManager上。这可以帮助提高任务的稳定性和可靠性。

    5. 检查GC日志:尽管您提到GC日志中的Heap内存占用并不高,但仍然建议仔细检查GC日志,确保没有内存泄漏或其他潜在的性能问题。

    2023-12-04 13:31:49
    赞同 展开评论 打赏

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

相关产品

  • 实时计算 Flink版
  • 相关电子书

    更多
    Flink CDC Meetup PPT - 龚中强 立即下载
    Flink CDC Meetup PPT - 王赫 立即下载
    Flink CDC Meetup PPT - 覃立辉 立即下载