00:00
好,那不用预定义选项,咱们后面可以调什么呢?呃,我们说了参数有那么那么多个,但一般比较推荐大家调的就这么几个大东西。一个是叫快缓存,一个叫right buffer相关的,对吧,你看后面这几个都什么?Right buffer right buffer对吧?光给大家讲参数名,大家没感觉,咱们看这一张图。诶,图呢,啊,这一张图我拉下来。首先我们看这个快缓存调的是哪呢?我们说Rose DB要用到内存,内存的数据回头会刷写到磁盘对不对?它其实是这么个原理,我简单介绍一下啊,他们写的时候,它会写入到内缓,内存缓冲的一个对象叫做table,叫内存表。内写入正在写入中的内存表,它是active,是活跃的,活动的,正在活动中,活跃中的,好,那每个表大小是不是得有一个?
01:03
那无限期的下去吧,对吧,它满足一定条件,它就会换状态。叫Switch到什么read only table从活跃的变成不活跃的,那不活跃的这种叫只读的内存表,那这个表呢,它只能读不能写,对吧?那这张表是准备被刷写到磁盘上面去的,也就是说第一步写活跃表,第二步切换成。只读表第三步,只读表往外刷啊,这是他写的三部曲。另外它这一块,呃,那咱们的快缓存,其实你可以理解为呃,整体的一个快缓存。因为它里面的文件形式是一块一块的,是以文件块的形式存的啊,这是更底层的事儿啊。那首所以咱们第一个呢,增大缓存,其实就是增大这块内存。对吧,你是不是这一块内存调大点,它就不用那么频繁刷啊。
02:03
对吧,减少刷类似咱们MR里面经常调,是不是有个内存缓冲区,内存缓冲区咱们是不是可以尝试着调到它的大小跟预写阈值,对吧?一些调优手段也包括什么减少溢血次数类似的道理啊,这都有点类似。那第二一个呢,咱们。就是另外一个概念叫broke catch就更具体的。这是只读的快缓存,大家联系一下h base,咱们读数据的时候,是不是经常也会在内存里面缓存有一个快缓存呢?对吧?它有点类似我读过的数据,我会在这个内存里面快缓存中把它缓存下来。那么下次我再读,我是不是直接从快缓存查就行了,如果这里有,那直接返回,不用去扫文件,如果这里没有,他还要需要去扫本地磁盘,对吧,那扫本地磁盘肯定是效率要低一点。
03:01
它是以此来加速,那么我们是不是希望这个快缓存越大越好,对吧,它默认的是八兆。这个八兆。那这个八兆二咱们可以调到64~256,看你资源够不够了,那咱们整体这个是属于什么。Manage the state吗?咱们刚才说的整体可以调大,那个是什么管理内存呢?Flink内存模型还记得吧?啊,是不是有flink内存的0.4倍还记得不?咱们前面聊了,忘了你去回顾一下啊。你要调整体就可以调这个啊,不聊那个这快缓存从八兆,咱们建议调成64~256啊。那你最至少也调个64吧,这样比较好。一般也是够啊。十。这是一个快缓存啊,把它调大好。再一个,他们会增大right buffer和level预知大小。
04:05
这个就涉及到RODB数据的存储状态,它也有一个K一样叫什么列足。啊,那咱们的一个状态。咱们整个流逝作业是不是可能有多个状态呢?甚至说咱们多个并行度是不是也有多个状态,或者说咱们分组的是每个组一个状态。反正就状态肯定不止一个嘛,说白了就这个意思,那每一个状态它用的是一个列组。那每个列族他在写的时候会独占一个red buffer。啊写缓冲区,那它默认是64兆,咱们可以把它这个写缓冲给他调大一点,那为什么调调大他写的效率就提高了嘛,这个的目的是提高他的一个写效率。那咱们在写这个。写的时候调这个B的时候,还有一个值要一起调,就level阈值的大小。
05:00
嗯。这个呢?这样的话,你同时调大他们两个配合起来才好,因为其实他写的时候它有做索引的,索引的话它是也是按层级的,你这个阈值小哈,比如说呃,一兆我就分一层,再一兆再分一层,再一兆分一层,那回头你读的时候是不是要索引很多集。对吧,这样效率就低了,那你缓冲大了,我把这个分层的这个阈值调大一点,也不至于分那么多出来啊。那这个呢,默认是64兆,我们对应把它调大,调到它的五到十倍啊,比如说调到30啊五倍这个乘以五是不是就320兆,对吧,可以稍微调大一点啊,如果内存不够,你调个128也行。这两个参数对应就这啊,配置文件可以指定,提交参数也可以指定,那我比较推荐的,如果你们。呃,涉及的开发业务线或者模块没那么多,不不共用一套的话,我。
06:05
也就是说大概就是你用你们几个人用的话,你可以配置文件写死对吧,那就不用反复设置,那如果就是使用人数比较多,那还是啊不要写死对吧?啊,直接自自个儿呢,老老实实在提交参数指定或者在代码指定都行啊另外一个也是对write buffer的调优。Buffer呢,它每个对应的buffer最大量。那这个默认默认值是二。默认值是二。其实这个buffer其实就等于这个只读内存表的数量啊。你想啊,我right b有一个是不是对应一个一一个这个member table,对吧,就就你可以这么对等起来理解,那你想想我把它调大了,是不是写的效率提高了,两个人干活跟五个人同时干活,你搬砖是不是效率提高一点。
07:00
对吧,搬砖也搬的更快一点,那你不要说什么一个和尚有水喝,两个和尚挑水喝,三个和尚没水喝啊,他们是程序是代码,不会有人性的,你放心啊,你就放心大胆的试啊。好,那我们看还有一个后台线程数,还有一个buffer的合并数。你看又出现了一个什么right buff,其实咱们这边调又重点是什么,读的话是增大缓存,写的话就是right buff不断的去调啊。原则和思想就是这么来的,一个线程数呢,这个线程数是用来flash跟合并的一个线程数,也就是说啊。通天他你看。它是不是这里还要flash啊,Flash写出来它是不是SST文件呢。那你想想,一次刷写生成一个SST文件,那经过多次刷写,这文件不是很多吗?那不变成小文件的吗?所以它本身还会做一个事,叫什么合并。
08:02
Compassion压缩。但他做的就是什么合并默。会把这些SST把它合并一下,合并一下啊。大家会发现很多那个大数据框架,它底层设计是不是差不多呀,你像N8是不是也有那个沙否过程的一些小文件,一些小文件它是不是会呃,做一个归并排序,是不是也是在合并的过程,对吧。分布式的思想。就是什么。哇。分,先分开,然后再合再合,然后再合再合,对吧,先分再合再合再合,基本设计思路就这样啊。行,那这个线程数默认是一,那咱们可以把它调大,比如说改成四。但是这个值大家也可以看到,在一三版本,咱们看那个预定义选项的时候。它这里是不是也有一个四啊。
09:00
对吧。那这个不一定是一个东西啊。行这个线程其实一三版本默认就是了啊,默认就是。那如果你是不是一三版的,可能默认还是一啊。如果如果你你不是不是一三或者怎么样,你建议就调成四,另外一个就是合并数。Right buffer的合并数,也就是说咱们将数据从right buffer中flash到磁盘的时候。他需要合并的最小数量。默认是一,咱们可以把它调成一个三啊。Number two much,你看这个参数很直白。搬砖,搬砖。啊,这是你啊,不是你啊,这某个人啊,他要搬砖,他一次只能搬一块啊,走一趟搬一块,跟你走一趟一次性搬三块,哪个效率高,是不是三块效率但样的是。
10:10
这个是咱们关于那个block catch,还有这个所谓的right buffer的一些参数调整啊,这个原则大家要想明白啊,首先是读这一块,我调大写这个整个过程。咱们关于right buffer有一些调优啊。你按照这个图来记。
我来说两句