00:01
下面我们看一下checkpoint的相关设置。啊,经常有些人就是说check。是多大合适啊?会发现查找到资料。一般建议分钟级别。还有人又说,那延迟影响太大了。那我想要秒级别,到底哪一个好呢?这个东西你不能说谁好谁坏啊,就要说你就像你买房一样,有的买房是为了什么刚需,那有的买呢,它是为了改善啊,人家买的是别墅啊,或者什么高档的各种,那它是针对不同的需求来使用的啊,面向的对象受众是不一样,那一般的而言来讲,对于一般性的需求,我们还是比较建议设为分钟级别,比如说一到五分钟。这样是比较理想的。所以一般啊,你对这个时效性没有特别特别高的要求,那么这个是可以的。为什么呢?因为对于咱们状态,他每次是不是得访问HDFS中间是不是还涉及到网络IO啊,对吧,那这一块还是比较耗时,如果你状态很大呢,对吧,你可能设为一秒嘛,两秒那可能。
01:10
不太好。那如果你状态很大,这种你甚至可以往上加1.5到十分钟都没问题啊,这是一般性的任务而言啊。那么另外一个。他们要考虑一个时效性的要求,那如果说你本身对于这个指标的计算结果啊,你要求它是呃,延迟量的低,那这个时候切point你就不适合设的太大。为什么呢?比如说你的你做了下游,比如说是一个卡夫卡。也别说卡不卡了,反总而言之,咱们端到端一致性的话。呃,Think阶段咱们是不是最好基于事物来实现,要么密等,要么事物,对吧,那么事物里面又比较。好的,是不是一个两阶段提交。那两阶段提交,大家简单回忆一下,是不是第二次正式提交是依赖于什么check point的完成呗。
02:07
也就是说,如果你这个太长,比如说五分钟。好,中间这段是五分钟,那么前面这五分钟内的数据对于下游的系统来讲是不是无法读取的状态,它只是预提交状态。那么当我。呃。下一次。呃,这个po产生它可能很快做完,那这个也是在这里做完,中间间隔了五分钟对吧,那你是不是。下一次完成再呃得得考虑这个间隔呀,也就是说他是不是感觉看起来像是五分钟才可见,突然来一批数据啊,那像这种呢,那可能就呃不太合适设分钟级别,那我们可以设置什么秒级,一般是建议秒级,那毫秒级我觉得有点过分啊,当然这个要看你整个效率,还有你的一个呃资源情况怎么样。
03:00
那这个怎么考虑呢?咱们可以结合那个checkpoint完成的时长,咱们那word UI里面有一个n to duration啊,这个时间咱们可以参考它。你就可以。看到你最低最低设多少比较合适啊,另外呢,你也可以看看你设的比较低的时候,你的日志里边是不是经常有checkpoint越过啊,或者超时啊,或者被呃上一次没完成,下一次就又来了,然后把它替换掉了,这种情况啊,那你就可以考虑说,诶我是不是要该调大一点。而且咱们还主要是存在于这个barra对齐的过程啊。那关于这个point,咱们一般会设定这么几个参数啊,建议来讲,第一个呢是一个性格,性格呢咱们刚才讲的分钟或者秒级,另外呢,咱们会设置一个最小等待间隔。最小等待间隔的意思是啥呢?就你啊,比如说这是一个时间线啊,这个时间是一次bar插入,那比如说你间隔下一次是在这里插入。
04:10
那么是不是有可能存在这种情况,这个朋友非常非常慢,或者说你间隔特别特别短。那是不是存在有一个重叠的地方对吧,那如果极端情况你这个足够短。那执行时长可能是这样,那你看。是不是重叠很多呀?对吧,那基于这种情况,咱们可以有两种方式,第一种呢,设定check的最大并发。那个可以强行指定啊,最大同时能执行的这个数啊。那还有一个参数可以改呢,就是最小等待间隔,也就是这个意思啊,这次呃,Barry到了,然后它整次小方在执行,那第二次比如说本来在这儿最小等待间隔,比如说你是一分钟。哎,他判断,哎,不满足条件,那就没有在下一次。
05:03
到的时候判断最小等待间隔够了,这个最小等待间隔是上一次的结束到下一次的开始,中间这一段暂停的时间啊,暂停的时间,这个一般比较建议把它设一下,那最大并发一般设为一,默认就一,你也不用去设。啊,参考间隔吧,那咱们的建议一般是一半一半左右吧啊。那还有一个咱们会设置一个超时时间,这个默认呢是十分钟。也是怎么设呢?你可以参考你的间隔,可以把它,比如说你间隔是一分钟,那你这个超时时间也可以设为一分钟。那还有一个失败的次数,因为这个碰可能失败对吧?啊,那么就允许他失败的一个次数,那还有一个就是保留CK什么意思呢?咱们这个泡。它是自动恢复的时候用的,也就是说比即使咱们把它存在HDFS,那么如果咱们手动cancel掉这个作业啊,你手动把它取消这个HDFS上的check po,它是会被删掉的啊,不保存的啊。
06:15
那我们设置为保留,就即使你手动取消任务,那么切个point还是在HDFS上面,那这样的好处就是咱们除了用保存点来恢复之外,还可以选择指定用checkpoint来恢复啊。也是可以的。一个是咱们一般要设的啊,那咱们可以看看代码里面,之前在这里设的。呃。第一个呢,设定的一个间隔,我这边用的是什么呢?三秒钟啊。这是为了快一点啊,三秒,然后呢,精准一次。金纬一次,呃,还涉及到那个Barry对齐对吧,那后面呢。这就是最小等待间隔。那我设的也是三秒,我说了,呃,咱们可以参考它是它的一半,或者一倍或者两倍都行啊,那我也可以改成一秒,无所谓这个啊,我这边设置三秒,那在接下来容忍。
07:13
失败的次数我设了五次,你再调大一点都行啊,这边只是一个简单的案例啊,你建议调大一点,那超时时间呢,默认十分钟,我改成一分钟啊,应该也够,因为我间隔才三秒钟啊,给的太长,这个超时时间你就要结合你的。N to n的那个来调了啊。还有这个就是刚才讲的保留CK。啊,保留在外部系统嘛,External retain on cancel。就是咱们常规会社的,还有那个任务重启策略啊,那个这这边就不啰嗦了。咱们可以提交一下,再来看一下,我看刚才是不是有个咱们提交UV的案例,把这两个删了吧,状态。
08:00
那这边呢,就是指定的一个并行度,还有一个。内存还有槽数啊,没了。就简简单单的这个用的应该是内存级别的状态后端。啊,我们提交上去,然后看一眼啊。对,哈希map state be对吧,这是基于内存的状态后端啊,那其他参数的还是都一样的。那怎N来。调呢?如果是一般性的调分钟,这个不用讲,你直接设看几分钟,三分钟,四分钟,五分钟都可以,呃,那假设你现在对延迟有要求,你想要他延迟低一点,那我到底设多少合适呢?我想尽量的。间隔尽量的短。喂。那么大家注意,咱们点开这个checkpoint的时候,这里是不是有一个。
09:01
嗯。呃,你看这个历史也行,这是什么?端到端的一个时间周期,也就是说他在完成这一轮checkpoint用了多少时间,你看我现在是一秒。平均是一秒。还有几百毫秒的,你也可以看什么这个总结啊,总结总结这里列出来的,到目前为止最小。最大啊,平均还有最大,它这个端到端check point完成需要多长时间,那你很明显说我最大达到了一秒,平均也是接近一秒,那这个时候我设为500毫秒,那很明显就是不合适的,要么你对整个程序的性能再进行一个优化调整,那它的端到端这个效率提升,你再去降低它的一个间隔。另外,你还得考虑每一次的大小。如果特别大,它其实对应的这个时间就增加了啊,也是可以作为一个参考啊。
10:01
你。这个这个也不知道有没有问题,咱们呃,随便找一下日志吧。呃,咱们找找什么,看有没有。啊,这个是我那个。呃,指标监控的啊,我那个普罗米修斯还有对应的组件没有启动啊,这个无无关紧要了。看起来没什么异常啊。这没什么。
11:06
另外呢,咱们可以看一下这个po这个这边如果你设太短了,很多时候这边的状态就不是完成了,可能是有失败超时啊什么的,你就看一下啊,另外就结合这个端到端。呃,另外你看我现在得三秒,其实我是不是可以尝试着继续调低啊,啊大胆一点,比如说我调成1.5秒啊,比较自信啊啊或者说调成一秒一秒比较容许你偶尔的失败嘛。偶尔的超时对吧,也不会超过超时时间也也可以的啊,这个时候你可以去考虑。这个是咱们checkpoint的一个设置啊。嗯。
我来说两句