00:00
好,我们来看一下第一章资源配置的调优,那这一块呢,咱们主要从三个方面,第一个呢是关于内存的设置,第二一个CPU,第三一个并行度。经常也有人会想,会问,诶,我开发完一个flink作业,到底应该给多大内存,多大的并行度啊?这个呢,首先咱们没有一个通用的设置,那肯定呃是不可能的,因为你每个座位不一样的话,你的资源配置就应该是不一样。那咱们呢,就来。什么评估需要的资源量大?那下面呢,这里呢,咱们给了一个简单的提交命令啊,这一块就简单做个说明,就咱们提交命令经常会发现呃。不一样是什么呢?是因为一个版本差异啊,就从一一版本开始,提供了一个叫通用客户端模式,也就说白了,你看到杠T,那就是什么了,通用客户端。那如果是一零比以前的版本呢,咱们经常用的是杠M,那写的是,呃,比如说是雅安class,这是基于雅安的一个PU模式。
01:08
啊,记住这两个是等等价的啊等价的那如果是杠M,你指定参数的时候,经常用的是杠Y大D。那么如果是通用客户端,用的就是一个杠大地啊,仅此而已啊,就简单说一下。那我们来看先了解一下它的一个内存模型,你想要很好的评估。估估算一下它的需要内存量,那你就要先了解一下它的内存模型,你了解了之后啊,你才知道我该怎么去调整,对吧?哎,那么从flink大家知道从一零版本开始啊,他对内存模型做了一个重大的调整啊,那么我们目前看到了啊,就是一零级以后的一个内存模型,那我们主要聊的是一个谁呀,Task manager。那这个课程呢。相关内容。
02:01
我在那个flink源码里面也介绍过了,那咱们再来回忆一下啊,来,咱们拿着这张图挨个来看一下。首先我们总体来看,Flink是既使用的堆内存,也可以用堆外内存的啊,这首先我们有一个概念,那我们通常提交模式啊,是基于雅安的,那我们一般指定的话,还是建议大家指定一个叫进程内存。它呢,就包含了咱们这里提到的所有的内存。来。我们来聊一聊啊,首先第一个啊两块。黑的这两块KVM的一个空间和执行开销,那么这一块呢?它是这样,首先是这个圆空间呢,它默认是256兆啊,它是一个固定大小。默认值就是256,那么大家可以呢,根据需要去调整。那一般呢,咱们也不用去管它啊,就保留就行了啊,就让他用默认值,那第二一个它这个JM的执行开销,这个呢,它是由三个参数一起决定的。
03:13
首先它是有一个默认值的。默认呢,它是一个范围,分别是什么呢?最小最大。那还有一个比例,这是什么意思呢?也就是说呀,呃。不一定。他们的执行开销就是多大。那这个它是这么来计算的啊,它是我们的总进程内存等于这个比例,这个比例呢,默认就是0.1,举个例子,咱们的进程进程内存总的我设为啊,比如说嗯,十个G。那乘以0.1是不是等于一个G啊?那你得到这个值之后,还要跟最大最小值做一个比较啊,必须落在这个区间。
04:00
那如果你是。大于它的最大值,那么它就取最大值,如果你小于最小值,那就取最小值。啊,是这么一回事啊。这是这两块内存啊。那接下来我们往下看一个框架内存。框架内存就是flink框架本身它需要占用的一个内存,那这个呢,它又分为堆内的,还有。对外的。啊,他都有。那这个呢,他们都不记录咱们所谓slot的资源里面,也就是说咱们呃,资源隔离的时候,隔离内存的时候,这块内存是不算的啊,要扣掉再去均分。那么他们两个对内也好,对外也好,默认都是128兆啊,这个大家明白啊,明白一下。那第接下来我们看的就是一个task内存,这个说白了就是咱们执行任务处理,执行咱们用户代码啊,就处理数据,这个时候它本身需要用到的一个内存,这个内存它同样可以用堆内的,也可以用堆外。
05:09
那么。如果是堆内呢,它默认是没指定的。对外呢,默认不开启啊,这个首先大家要明白,那么它的大小怎么确定啊,它的确定很简单啊,为什么呢?呃,各其他模块的内存有一些是固定的,有一些有区间等等啊,其他块的内存都计算得到之后啊,总内存扣掉他们剩多少,那么就是task堆上内存。也就是说它的内存大小由剩多少来决定啊,他是剩的,吃别人剩菜啊,吃别人剩下的。放下,我们聊聊这个网络内存。网络内存。主要是在。对外这一块。它是属于对外的一个叫直接内存啊。
06:01
那么它呢,主要用来什么呢?就数据交换,咱们在扇子里面是不是,呃,Task上下游它是不是要交换数据啊,也就是说它是不是要发数据。他是不是要收数据啊,那中间这里是不是就可能涉及到一个网络传输啊,就这一块网络传输的时候要用到了一个内存,那么这一块呢,它一样啊,三个参数,一个是比例,还有一个最大最小值。那这个比例它默认是也是0.1,那最小六14兆,最大一个G。但是呢,大家注意这个比例0.1,它是谁啊,它是flink内存的0.1啊,不是总内存,那flink内存是哪一块呢?大家看图片啊。就这一块,我圈起来的这一块叫做flink内存。那总内存就进程内存指的是。大的这个他们中间的差距就是在C相关的一些开销里面。
07:03
嗯。那我们现在目前呢,呃,一般指定的都是什么进程内存,所以他在算这块内存的时候,是不是得怎么呢,先总内存减去JVM,剩下是flink内存之后呢,再来乘以一个0.1啊是这么来算的。还有一个托管内存。这块大家应该非常熟了啊,你只要是用DB跟这一块打交道,应该是比较多的托管内存,同样的是位于对外啊,它是。呃,叫manage的。管理内存。那他呢?默认也是一个比例0.4。它0.4是相对于flink内存而言的啊,也就是说不包含J这一块内存。呃,就Li内存乘以一个0.4,这是一个默认值,这个,然后呢,咱们也可以去指定具体的大小。
08:00
这个默认是,那如果你指定的话,它就会覆盖你这个比例的值,也就是说以指定的具体为准啊,那这个默认都是没有的,默认是没有的。那前面的好就是对各块内存给大家做了一个介绍。这是大家首先要了解的。
我来说两句