首页 > 编程知识 正文

flink组件介绍,flink读取mysql数据

时间:2023-05-06 12:54:43 阅读:14734 作者:2544

Apache Flink通过严格控制每个组件的内存使用量,在JVM上提供了高效的工作负载。 社区努力为所有配置提供合理的默认值,但并不适用于用户在Flink上部署的所有APP应用程序。 为了为我们的用户提供最大的生产价值,Flink可以在群集中进行高度和精细粒度的内存分配优化。

无论Flink在什么集群上运行,我们都知道真正工作的是任务管理器(以下简称TM )、作业管理器(以下简称JM ) )只负责任务调度今天这篇文章介绍了TM的内存模型。 因为JM的内存模型比较简单,所以在这里不碰。

在flink1. 10.0版中,社区对TM的内存模型进行了进一步的改进和升级。 虽然明确了内存的划分,但令人眼花缭乱,容易混淆。 我们先来看看下图。

Flink TM内存模型

在image-20210403163557657中,flink1. 12.0版改进了UI,在TM页面中添加了内存模型图,并清楚地显示了每个区域的内存配置和使用情况。

总流程内存包含flink APP应用程序使用的所有内存资源。 totalflinkmemory (flink APP应用程序使用的内存)用于执行Flink JVM的内存。 Total Process Memory支持容器化部署模式(需要用户指定),如Yarn/Mesos,相当于申请容器的大小,Total Flink Memory支持标准部署模式(需要用户指定)

总链路内存内部是堆中内存堆之外的内存。

堆内内存有两部分:帧堆内存任务堆内存任务堆内存

堆外内存有三个部分:管理内存主机内存框架堆栈内存帧堆外内存网络内存

”本节按照上图中的编号顺序,对这些内存的作用和构成方法进行说明

Framework Heap的含义表示Flink框架本身占用的内存。 这部分内存通常不需要修改,特殊情况下可能需要调整。

参数设置task manager.memory.framework.heap.size :堆内部分(Framework Heap (默认值128M;

任务管理器. memory.framework.off-heap.size :“堆外部分”(Framework Off-Heap )被分配为直接内存,默认值为128M。

Task Heap的意思是指出flink APP应用程式中使用的运算子和使用者程式码所使用的记忆体。

参数设置task manager.memory.task.heap.size :堆内部分(Task Heap )没有默认值,通常不推荐设置。 自动从Flink总内存中减去框架、托管和网络三部分的内存进行估计。

task manager.memory.task.off-heap.size :堆外部分(Task Off-Heap )被分配为直接内存,默认值为0,即不使用。 如果需要在代码中调用Native Method并分配堆外内存,可以指定此参数。 因为一般不用,所以很多时候可以保持0。

Managed Memory是指纯堆外内存,由MemoryManager管理,用于处于RocksDB状态的后端,如中间结果缓存、排序和哈希表。 因此,RocksDB占用的内存现在可以由用户显式控制,不再像以前的版本那样难以预测和调整。

参数设置task manager.memory.managed.fraction :管理内存占flink总内存taskmanager.memory.flink.size的百分比,默认值为0.4;

任务管理器. memory.managed.size :主机内存的大小。 没有默认值。 通常不指定,根据上述比率进行估计,变得更灵活。

网络含义说明网络内存使用目录内存,在任务和任务之间交换数据(shuffle )时,必须缓存数据。 缓存可以使用的内存大小是此网络内存。 那由三个参数决定。

参数设置taskmanager.memory.network.min :网络缓存的最小值,缺省为64MB;

taskmanager.memory.network.max :网络缓存最大值,默认1GB;

task manager.memory.net work.fraction :网络缓存占flink总内存taskmanager.memory.flink.size的百分比。 默认值为0.1。 如果根据此百分比计算出的内存量小于最小值或大于最大值,则限制为最大

小值或者最大值。

JVM Metaspace 含义描述

从 JDK 8 开始,JVM 把永久代拿掉了。类的一些元数据放在叫做 Metaspace 的 Native Memory 中。在 Flink 中的 JVM Metaspace Memory 也一样,它配置的是 Task Manager JVM 的元空间内存大小。

参数设置

taskmanager.memory.jvm-metaspace.size:默认值 256MB。

JVM Overhead 含义描述

保留给 JVM 其他的内存开销。例如:Thread Stack、code cache、GC 回收空间等等。和 Network Memory 的配置方法类似。它也由三个配置决定

参数设置

taskmanager.memory.jvm-overhead.min:JVM 额外开销的最小值,默认 192MB;

taskmanager.memory.jvm-overhead.max:JVM 额外开销的最大值,默认 1GB;

taskmanager.memory.jvm-overhead.fraction:JVM 额外开销占 TM 进程总内存

taskmanager.memory.process.size(注意不是 Flink 总内存)的比例,默认值 0.1。若根据此比例算出的内存量比最小值小或比最大值大,就会限制到最小值或者最大值。

我们再来看一下 TM 启动日志里面内存相关的配置信息如下:

 INFO  org.apache.flink.yarn.YarnTaskExecutorRunner                 [] -  Program Arguments: INFO  org.apache.flink.yarn.YarnTaskExecutorRunner                 [] -     -D INFO  org.apache.flink.yarn.YarnTaskExecutorRunner                 [] -     taskmanager.memory.framework.off-heap.size=134217728b(128M) INFO  org.apache.flink.yarn.YarnTaskExecutorRunner                 [] -     -D INFO  org.apache.flink.yarn.YarnTaskExecutorRunner                 [] -     taskmanager.memory.network.max=214748368b(204.8M) INFO  org.apache.flink.yarn.YarnTaskExecutorRunner                 [] -     -D INFO  org.apache.flink.yarn.YarnTaskExecutorRunner                 [] -     taskmanager.memory.network.min=214748368b(204.8M) INFO  org.apache.flink.yarn.YarnTaskExecutorRunner                 [] -     -D INFO  org.apache.flink.yarn.YarnTaskExecutorRunner                 [] -     taskmanager.memory.framework.heap.size=134217728b(128M) INFO  org.apache.flink.yarn.YarnTaskExecutorRunner                 [] -     -D INFO  org.apache.flink.yarn.YarnTaskExecutorRunner                 [] -     taskmanager.memory.managed.size=858993472b(819.2M) INFO  org.apache.flink.yarn.YarnTaskExecutorRunner                 [] -     -D INFO  org.apache.flink.yarn.YarnTaskExecutorRunner                 [] -     taskmanager.cpu.cores=4.0 INFO  org.apache.flink.yarn.YarnTaskExecutorRunner                 [] -     -D INFO  org.apache.flink.yarn.YarnTaskExecutorRunner                 [] -     taskmanager.memory.task.heap.size=805306352b(767.9M) INFO  org.apache.flink.yarn.YarnTaskExecutorRunner                 [] -     -D INFO  org.apache.flink.yarn.YarnTaskExecutorRunner                 [] -     taskmanager.memory.task.off-heap.size=0b

这个内存就是上图中 Configured Values 显示的值,我们把这些值加起来 taskmanager.memory.framework.off-heap.size + taskmanager.memory.network.max + taskmanager.memory.framework.heap.size + taskmanager.memory.managed.size + taskmanager.memory.task.heap.size = 128 + 205 + 128 + 819 + 768 = taskmanager.memory.flink.size = 2048M 这个结果跟我们在 flink-conf.yaml 中的配置是能对上的.

总结

上面这么多的内存,到底应该怎么配置呢?首先官网不建议同时设置进程总内存和 Flink 总内存。这可能会造成内存配置冲突,从而导致部署失败。额外配置其他内存部分时,同样需要注意可能产生的配置冲突。

其实 taskmanager.memory.framework.heap.size ,taskmanager.memory.framework.off-heap.size,JVM Metaspace,JVM Overhead 这几个参数一般情况下是不需要配置的,走默认值就可以了.我们主要关注的是 Task Heap、Managed Memory、Network 这几部分的内存,当然 Flink 本身也会计算出这 3 部分的内存,我们自己也需要根据任务的特点,比如流量大小,状态大小等去调整.

推荐阅读

Flink SQL 如何实现列转行?

Flink SQL 结合 HiveCatalog 使用

Flink SQL 解析嵌套的 JSON 数据

Flink SQL 中动态修改 DDL 的属性

Flink WindowAssigner 源码解析

Flink 1.11.x WatermarkStrategy 不兼容问题

如果你觉得文章对你有帮助,麻烦点一下赞和在看吧,你的支持是我创作的最大动力.

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。