Flink|《Flink 官方文档 - 部署 - 内存配置 - 调优指南 & 常见问题》学习笔记

这篇具有很好参考价值的文章主要介绍了Flink|《Flink 官方文档 - 部署 - 内存配置 - 调优指南 & 常见问题》学习笔记。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

学习文档:

  • 《Flink 官方文档 - 部署 - 内存配置 - 调优指南》
  • 《Flink 官方文档 - 部署 - 内存配置 - 常见问题》

学习笔记如下:


调优指南

独立部署模式(Standalone Deployment)下的内存配置
  • 通常无需配置进程总内存,因为不管是 Flink 还是部署环境都不会对 JVM 开销进行限制,它只与机器的物理资源相关。
  • 建议配置 TaskManager 和 JobManager 的 Flink 总内存或其组成部分。
  • 如果出现 Metaspace 不足的问题,可以调整 JVM Metaspace 的大小。
容器(Container Deployment)的内存配置
  • 建议配置 TaskManager 和 JobManager 的进程总内存,该配置用于指定分配给 Flink JVM 进程的总内存,即需要申请的容器大小。
  • 如果配置了 Flink 总内存,Flink 会自动加上 JVM 相关内存推算总内存,并根据总内存申请容器大小
  • 如果 Flink 或用户代码分配超出容器大小的非托管的堆外内存(本地内存),部署环境可能会杀掉超用内存的容器,造成作业执行失败
State Backend 的内存配置
  • 执行无状态作业或者使用 Heap State Backend 时,建议将托管内存设置为 0,从而最大化分配给 JVM 上用户代码的内存。
  • 在使用 RocksDB State Backend 时,RocksDB 会使用本地内存,但默认情况下会限制其内存用量不超过用户配置的托管内存;因此,建议配置足够多的托管内存。如果关闭了 RocksDB 的内存管理,那么在容器化部署模式下如果 RocksDB 分配的内存超出了申请容器的大小(即进程总内存),则可能会造成 TaskExecutor 被部署环境杀掉。
批处理作业的内存配置

Flink 批处理算子使用托管内存来提高处理效率。当算子运行时,部分操作可以直接在原始数据上进行,而无需将数据反序列化成 Java 对象。因此,托管内存对应用性能有直接影响,Flink 会在不超过其配额限制的前提下,尽可能多地分配托管内存。

因为 Flink 明确知道可以使用的内存大小,所以当托管内存不足时,Flink 会将数据落盘,避免 OutOfMemoryError 发生。

常见问题

IllegalConfigurationException

报错原因:配置参数中存在无效值或配置冲突

解决方法:根据报错信息修改配置

OutOfMemoryError: Java heap space

报错原因:JVM 的堆空间过小

解决方法:可以通过增大总内存、TaskManager 的任务堆内存、JobManager 的 JVM 堆内存等方法来增大 JVM 堆空间

OutOfMemoryError: Direct buffer memory

报错原因:JVM 的直接内存限制过小,或者存在直接内存泄漏(Direct Memory Leak)

解决方法:

  • 确认用户代码及外部依赖中是否使用了 JVM 直接内存,以及如果使用了直接内存,是否配置了足够的内存空间
  • 可以通过调整堆外内存来增大直接内存限制
OutOfMemoryError: Metaspace

报错原因:JVM Metaspace 限制过小

解决方法:调整 TaskManager、JobManager 的 JVM Metaspace

IOException: Insufficient number of network buffers

报错原因:TaskManager 的网络内存过小。

解决方法:通过调整 taskmanager.memory.network.mintaskmanager.memory.network.maxtaskmanager.memory.network.fraction 增大网络内存。

容器(Container)内存超用

如果 Flink 容器尝试分配超过其申请大小的内存(Yarn 或 Kubernetes),则通常说明 Flink 没有预留出足够的本地内存。 可以通过外部监控系统或者容器被部署环境杀掉时的错误信息判断是否存在容器内存超用。

对于 JobManager 进程,你还可以尝试启用 JVM 直接内存限制(jobmanager.memory.enable-jvm-direct-memory-limit),以排除 JVM 直接内存泄漏的可能性。

如果使用 RocksDbStateBackend 且未开启内存空值,则需要尝试增加 TaskManager 的托管内存。如果使用 RocksDbStateBackend 且开启了内存管理,但堆外内存在 savepoint 和 checkpoint 期间增长,则可能是由于 glibc memory allocator 的 Bug 导致,可以尝试给 TaskManager 增加环境变量 MALLOC_ARENA_MAX=1

此外,还可以尝试增大 JVM 开销。文章来源地址https://www.toymoban.com/news/detail-826223.html

到了这里,关于Flink|《Flink 官方文档 - 部署 - 内存配置 - 调优指南 & 常见问题》学习笔记的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • flink任务内存调优,TaskManager、JobManager内存配置

            Flink是基于java的JVM运行,拥有高效的数据处理能力,但是考虑到用户在 Flink 上运行的应用的多样性,尽管flink框架已经为所有配置项提供合理的默认值,仍无法满足所有情况下的需求。 为了给用户生产提供最大化的价值, Flink 允许用户在整体上以及细粒度上对集

    2024年02月06日
    浏览(47)
  • Flink|《Flink 官方文档 - 部署 - 命令行界面 - 提交 PyFlink 作业》学习笔记

    学习文档:《Flink 官方文档 - 部署 - 命令行界面 - 提交 PyFlink 作业》 学习笔记如下: 当前,用户可以通过 CLI 提交 PyFlink 作业。对于通过 flink run 提交的 Python 作业,Flink 会执行 python 命令。因此,在启动 Python 作业前,需要先确定当前环境中的 python 命令指向 3.7+ 版本的 Pyt

    2024年02月22日
    浏览(65)
  • 可以参考Copilot的官方文档和社区,了解更多关于Copilot的使用技巧和常见问题

    在PyCharm中使用Copilot的步骤如下: 获取Copilot的使用权限:首先,确保你拥有一个GitHub的账号。然后,进入Copilot首页,登录你的GitHub账号,并申请使用。几天后,你会收到一封回复邮件,点击邮件中的链接,登录到GitHub。 安装Copilot:在PyCharm中,找到\\\"File\\\"(文件)菜单,然后

    2024年02月02日
    浏览(95)
  • Flink|《Flink 官方文档 - 内幕 - 文件系统》学习笔记

    学习文档:内幕 - 文件系统 学习笔记如下: Flink 通过 org.apache.flink.core.fs.FileSystem 实现了文件系统的抽象。这种抽象提供了一组通用的操作,以支持使用各类文件系统。 为了支持众多的文件系统, FileSystem 的可用操作集非常有限。例如,不支持对现有文件进行追加或修改。

    2024年02月03日
    浏览(37)
  • Flink|《Flink 官方文档 - 概念透析 - Flink 架构》学习笔记

    学习文档:概念透析 - Flink 架构 学习笔记如下: 客户端(Client):准备数据流程序并发送给 JobManager(不是 Flink 执行程序的进程) JobManager:协调 Flink 应用程序的分布式执行 ResourceManager:负责 Flink 集群中的资源提供、回收、分配 Dispatcher:提供了用来提交 Flink 应用程序执行

    2024年01月19日
    浏览(48)
  • Flink|《Flink 官方文档 - 概念透析 - 及时流处理》学习笔记

    学习文档:概念透析 - 及时流处理 学习笔记如下: 及时流处理时有状态流处理的扩展,其中时间在计算中起着一定的作用。 及时流的应用场景: 时间序列分析 基于特定时间段进行聚合 对发生时间很重要的事件进行处理 处理时间(processing time) 处理时间的即数据到达各个

    2024年02月03日
    浏览(53)
  • Flink|《Flink 官方文档 - DataStream API - 概览》学习笔记

    学习文档:Flink 官方文档 - DataStream API - 概览 学习笔记如下: Flink 的 DataStream API: 数据里的起始是各种 source,例如消息队列、socket 流、文件等; 对数据流进行转换,例如过滤、更新状态、定义窗口、聚合等; 结果通过 sink 返回,例如可以将数据写入文件或标准输出。 Da

    2024年01月23日
    浏览(55)
  • Flink|《Flink 官方文档 - DataStream API - 算子 - 窗口》学习笔记

    学习文档:《Flink 官方文档 - DataStream API - 算子 - 窗口》 学习笔记如下: 窗口(Window):窗口是处理无界流的关键所在。窗口可以将数据流装入大小有限的 “桶” 中,再对每个 “桶” 加以处理。 Keyed Windows 在 Keyed Windows 上使用窗口时,要调用 keyBy(...) 而后再调用 window(..

    2024年01月18日
    浏览(48)
  • Flink|《Flink 官方文档 - DataStream API - 状态与容错 - 使用状态》学习笔记

    学习文档:Flink 官方文档 - DataStream API - 状态与容错 - 使用状态 相关文档: 有状态流处理背后的概念:Flink|《Flink 官方文档 - 概念透析 - 有状态流处理》学习笔记 Redis 过期 key 的删除机制:Redis|过期 key 的删除机制 学习笔记如下: 如果要使用键控状态,则必须要为 DataS

    2024年02月03日
    浏览(44)
  • Flink|《Flink 官方文档 - DataStream API - 用户自定义 Functions》学习笔记 + 源码分析

    学习文档:Flink 官方文档 - DataStream API - 用户自定义 Functions 学习笔记如下: 用户可以通过实现接口来完成自定义 Functions。 实现接口并使用的样例: 使用匿名类实现的样例: 使用 Lambda 表达式实现(Java 8)样例: 所有的 Flink 函数类都有其 Rich 版本,在 Rick function 中,可以获

    2024年01月18日
    浏览(48)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包