00:00
好,那么接下来呢,我们看一下第二章反压处理,那反压呢,其实是这样子的,那就是数据处理不过来了,就处理效率变低了,比如说啊在这边每一个算子对吧?好。它都会有两个内存。两个内存对吧,这个呢是in for。入池子对吧,还有一个凹。诶,这是两个内存空间,那么这边也一样。这边也一样,对吧,这有一个in啊,这边有一个out,这边有个out,好,那比如说我数据呢,过来了对吧,过来之后呢,我这边处理的速度非常慢啊,这边呢处理的慢。说慢会怎么样呢,那我处理不过来呀,你数据一直发,我就把数据缓存在这了,对吧?好,但是呢,有一个问题,我这缓存满了呢。我缓存本来数据呢,这样发对吧,这样发啊,这是source啊,这是前面source中间转换对吧?好,那我这边满了对吧,这边满了满了之后呢,他就通知前面,诶你别给我发了。
01:05
我这都已经满了对吧,你别给我发了。收不下了,那怎么办呢?好,那他就先在这存着,哎,在这存着对吧,我先不给你发,等会儿呢,等你差不多了,我再给你发对吧,他俩一直要通信嘛,哎,你这边有空间了,我就可以给你发对吧?好,但是呢,他这边也满了,满了之后呢,本来人家处理挺快,对吧,把人家这儿堆满了,堆满之后呢,他也只能堆在这儿了啊最后呢,又反馈给SS,那就SS假如说是卡夫卡。卡夫卡对吧,那怎么样,那就不接收新的数据了,因为我们知道卡夫卡的消费者的数据是拉取的模式,对吧?啊,它是拉取的模式,所以呢,他就不接受新的数据了,那体现了一个点,就在于我们整个的延迟性变高了。延迟拉高了对吧,咱们整个这个延迟就拉高了。对吧,它的体验在这好呃,这是我们所知道的一个。
02:03
影响啊,就是产生了反压以后的一个影响啊,那如果说只有短暂的一个时间呢,那还好对吧,短暂时间呢,可能你处理卖那缓存缓弹到之后呢,一下子。高峰期过去了,对吧,现在数据量很小了,诶一样的呢,你就你就。消费掉了,只不过说在产生反压的这一刻呀,会怎么样,会有这个短暂的延迟性拉高的一个情况发生,对吧?好,那如果长期处于这个反压状态,那就不好了,那甚至你整个延迟就越来越高,越来越高,对吧,最后呢,可能导致这个资源整个用完了,诶崩掉了都有可能,对吧?啊但是短期内是不会的,对吧?好,那这是我们所说的一个反压的一个现象啊,但是我们知道这个东西也没有用啊,那我怎么看呢?对吧?那这个时候呢,就可以用我们的这个内容来看。我们可以在网页上去看啊来,我们这样首先来找到这个反压的一个方式,对吧?呃。
03:00
咱呢用这个代码我看一下啊,这是join对吧,然后呢,我们找一个。就找这个吧,我的test对吧,就用它啊哈杜1028888是吧,行,那我们呢,把这打开啊。给大家启动一下啊。把这个提起来以后呢,咱们就看一下。好,然后接下来呢,我把这个日志啊。我改成info或改成info可以吧,呃,然后呢,在这边我要加一个东西啊,加一个东西就是在本地运行的时候,我们要加一个依赖啊,加个依赖,要不然你看不到那个页面,我们就加到弗格这一起啊,放放在这啊。我加个依赖。刚。杠。哎。
04:01
没有提示了。嗯,我找一下。它正常的会有这个提示。Table。沉默弗,哎,没有吗,杠啊。Web应该是他啊看web,然后呢,把它拿过来。然后呢,是版本对吧。然后是这个。嗯。嗯,他下不下来吗?我看一下啊,是我把这个依赖记错了吗。Web。是啊,Wrong time吧,应该是wrong time,这个是不是记错了?茯苓双泰米胶的。呃。运行包在本地运行,我们要看到那个web不对呀,应该还有一个web呀。
05:07
不对啊,那我先运行一下,我来看看啊,来看看他好像还是缺一个依赖啊,那不管了,我们先呢运行一下啊,把这个运行起来,我们看一下啊走。这个呢,在我们整个的运营页面上面来能看到啊,能看到整个这个效果对吧。然后呢,Local。哎,就是它对吧,点开啊。你看他缺东西吧,但是这边怎么没有web呢?这很奇怪呀。Web包怎么没有呢?我去找一下,我去找一下它不提示啊,它不提示,不提示呢,就说明有问题啊。嗯,然后呢,应该是org。波尔阿帕奇对吧,阿帕奇,然后呢,Link。咱们是Li web web web我看一下啊。
06:00
这个呀,哦,直接是2.12,没有那个,哎,对啊,就刚才我们写的不是他吗?就是这个包啊,对吧,就是他呀。那我为什么引不进来呢?很奇怪啊,我再加一个再加一个啊,就是它啊,要不然你在本地运行的时候看不到这个什么。看不到这个。信息啊,嗯,比如说我把这个改一下,把它改一下。呃,然后这个呢是web。这个是外部。去折哥厉害是什么意思啊,2.11吗?2.12啊,刚才我是2.12对吧。然后我们的版本啊,我们的版本是。这个。我看啊,Web01:13点零嘛。啊,肥。这有问题。这是刚下的是吧,那我记错了吗?整个的东西。等会啊。
07:00
我看一下,嗯,我记得有一个link外包,我们要把它加上。咱们才能看到这个。运行的页面哈,我们才能看到运行的页面。虽然乱码了,但是泽哥依旧是大宁则什么什么东西乱码了,没有乱码呀?稍等啊,我刷新一下。弗,Runtime Bible是吗?那我还是记错了这个是吧?啊,那我看一下这个啊。Wrongtime web。你刚才在这看到了是吗?有一个Li wrong time we是吗?嗯,我看一下啊,我其实这里面肯定都有啊,然后呢,应该能找到对吧。Wrongtime web这个也是刚刚下的呀。这个也是刚刚下的呀。
08:01
哦,还真是这个包啊,这个就能下载下来了,对吧,这个就能下下来,那就是它啊。稍等我们那要走完,应该是少了一个wrong time我记错了,记成了一个web对吧?啊,那没关系啊,那么运行好。好,那我们重新来运行一下啊,运行一下就刚才呢,我们看不到那个页面信息,对吧?啊所以呢,就缺,其实缺的是这个依赖啊,缺的是一个依赖,但正常的我敲web它会有提示,但是这个是不是换电脑了之后,它这个仓库里边有东西没有提示啊好,那我们呢,CTRL加F,然后locall。Host,然后呢,点击这个,哎,这就有了,对吧,你其实就看到这个页面啊,那我们点到这个任务里边来,那反压不反压在哪看到,比如说对于这个map任务而已啊点开点开好以后呢,你看这这边有一个什么就叫反压被压对吧,被压好那么现在呢,它是OK。绿色的对吧,绿色的原料绿那就没有问题。
09:01
啊,那是没有问题的原料率对吧,因为我们现在一条数据都没有,他怎么可能会反压呢,如果说这儿。他反压了,它是红的,它不有问题吗?对吧?啊,这是我们看到反压的这个现象在这儿啊,就是你可以通过这个地方来做一个监控。对吧,啊,那嗯,有三种颜色,绿的黄的跟红的,那绿的呢,就是我们不是刚才说有那个池子嘛,对吧,如果池子呢,在0%~10%。池子的使用量,这个呢,是绿的。这是OK对吧,好10%~50%,那这个呢,是黄色的。黄色的就警告对吧,比方说warning对吧,啊warning好,那如果说50%以上呢。50%往上呢,那就红色的啊,红色的那就有问题了,有大问题对吧,你既然到了50%啊,这个问题很严重啊,知道这个意思OK吧,它有这个三种啊,Errorrow,对没没毛病啊,就是当然也不是errorrrow啊,就是很严重对吧,很严重啊,这倒不是,至于是错误对吧?啊不能叫error对吧?好,那就是红黄绿啊三种啊,就这三种啊那那这这上面也给大家看到。
10:11
绿的如果说呢,你看啊,这个就是红的,看见没海高对吧?啊海高啊,那那这个里边呢,我们就说了,这个是零到零到100.1%嘛,0.1~0.50.5以上。对吧,分为三种啊,分为三种。OK吧,好,嗯,那我想问大家啊。按照刚才我们所说的,比如说。我看到这边是红的,我说这个map有问题,这样说对吗?我说它产生反压了,我说这个问题就在这儿,我要打开这个map算子去看一看它里面有没有什么问题。这样对不对?对,假如说这是红的啊,这是红的,我认为呢,问题就出在这儿。
11:01
这样说对不对,大家想。啊,总说不对,哪哪哪不对。对,问题可能出在他后面啊,对了啊,就是刚才我们说的弗林格呢,它是这个逐级反馈的啊,比如说它的后面。假如说这个地方出现了反压对吧,那他又会这边池子就满了对吧,满了之后呢,通知你,诶,你不要给我发了,那你这个池子就满了,你池子满了之后呢,你如果说还持续啊,这个现象没有改善,那这就满了,他呢也会跟着红,就是我们得找到一个什么样的算子。就是一个一个看对吧,我们去找到一个什么样的算子才能定位它,我们可以认为它是有问题的,就是它自己是红的,但是它下游是绿的。能明白吗?他自己是红的,它的下游是绿的,那这个时候我可以认为这个算子怎么样。
12:00
有问题。对吧,问题出在这个里边,是不是出在这一块啊,是不是我们要定位问题得这样去找啊,这个能明白吗。能不能明白对吧,就是它自己是红的,然后它下游是绿的,说明下游没有问题对吧,然后呢,你自己红了,那问题不就出在你这块吗?是不是对吧?好,那关于刚才两个池子啊,你其实在这边也能看得到来往后翻啊。这边呢,有一个matrix对吧,这是监控项啊监控项它呢,你看啊,这边有什么叫破。啊叫对吧,这个是入口值的对吧,还有这个什么呢?Out,给大家看一下啊。呃,这是输出的,呃,Record out对吧,这是输出的数量啊。然后我们找一下这个out for,诶它在哪呢?我看一下啊。嗯,Out哦,这这对吧,这是out us对吧。
13:00
对吧,这是输出的,输出的数据的使用量,那这是我们刚才说的啊,这是我们刚才所说的,对吧,它呢是。池子啊,这是它这个尺寸就是内存池对吧?啊,它前后各有一个,各有一个对吧,所以现在都是空的,没有数据啊,包括这里边还能接入很多东西,你看弗Li它本身自带的这个网页对吧,他给我们提供很多指标,你比如说呃,这里边。Current input whatmark,对吧?但是这个没什么用,哎,是否反压了对吧?监控指标,哎,Current inputmark,然后number record in。对吧?这是什么输入数据量对吧?啊,这是行数条数啊,这个呢是number record in per second哎,这是每秒钟的输入量平均值对吧?每秒钟啊,然后呢,Number out,就是输出的这个啊,这是平均的每秒钟的,呃,然后呢,Buff in no啊,然后还有这个什么buffout,就是输出的整个这个buff有多大对吧?啊,这个都有啊,Record in对吧?总的输入量是多少啊,那这个都可以看到啊,除了这个record啊,Record行数对吧?它还有这个best,看见没?
14:06
Number就是说你不光有条数,我还可以看到它的一个具体的量是多大,对吧,这个都能看得到,但是你不在这看这也有,你看s task这。看见没?对吧,叫。Received best received a best send,对吧,这是接收这两个是in吧,对吧,这两个呢。Send out吗?一个是大小,一个呢是行数。对吧,是横竖啊这些东西呢,其实在我们flink里边,就是flink它本身所自带的这些监控项里边就有很多很多对吧,所以关于flink这个程序的一个监控哈,关于它的一个监控,那其实就比较简单,就是说我们用一个工具把它内部自己所带的这些什么。监控项的指标,把这些指标搂出来。
15:00
然后呢,在页面上做可视化,可以配置这个告警对吧,因为这个页面啊,其实不太适合做监控,大家想为什么。这个页面它不能做报警。所以他不适合做监控,能明白吗?对吧,因为你看啊,你这么个页面放在这儿,我不能说一天到晚我派个人在这盯着吧。对吧,而且我有那么多任务,我哪盯得过来啊,对吧,所以呢,未来还是有这个什么监控工具的,诶他呢,其实就很简单,他就把fli这些指标给他读过去,其实他不是说自己去监控这个指标啊,而是说什么呢?Fli把这个指标已经有了,有了之后呢,他给他拿到,拿到以后呢,展现在这个页面上面,同时更重要的一个事情是干什么呢?要可以配置告警,诶你配置参数对吧,比如说这个反压这个参数对吧?呃,它到达50%了,我。判断它产生反压了,然后呢,我告警。
16:02
对吧,我告警发邮件打电话。发短信对吧,通过这些方式,它有这个功能,那这个是不是更好了,比你说一天到晚在这盯着也好了。OK吗?对吧,但是那个其实。监控啊,呃,已经在班里早就不讲了,但是网上都有视频啊,网上我们专门录了一套视频,你可以去看啊,不难啊,那个监控不难,就是一个配置对吧,配置之后呢,你就可以看就完了,对吧?啊,那网上有专门的一套视频叫普罗米修斯。啊。听到了吧,叫普罗米修斯。啊,用普罗米修斯去做监控的啊。好,这是我们所看到的这个东西,就是它反压我们要定位对吧,我们一般呢,要通过这个监控工具去定位诶。对吧,而且。刚才我们提到一个点,我们要找到这个有问题的这个算子,对吧,必须要。
17:01
下游是正常的,他自己呢,出现了异常才是算子。所以啊,所以这个里边呢。有一个事情要注意一下,如果你发现了被压,然后呢,你要定位问题对吧,你一定要干什么,先把这个任务链给他干什么,禁用掉。啊,因为有可能你的map filter Fla map这三个算子呢,你写了并度相同对吧,它就合并了,它是不是合会合并成一个任务链了,对吧,那那我就搞不清楚到底是map出了问题,还是filter还是Fla map搞不清楚吧,那我把任务链禁掉。是不是就可以了,我就知道具体是哪一个算子出了问题了,能听懂。就是先呢,一般来说我们要找这种。出现反压的,咱们要干什么事呢?要禁用任务链对吧,因为他可能会合并任务链,你想想看,一个任务链里边好贴个算子,你就不方便定位对吧,我就找不到这些是什么情况对吧?好好,呃,那么接下来呢,我们就分为这几块啊,我们就分为这几块,呃,首先呢,这里边啊。
18:08
我们这样看啊,它总共原因呢,有三类啊,就是分析原因并解决啊,然后呢,这有三类,这是第一个。这是第一大类啊,这是第二类。这个呢是第三类。啊,你看啊,第一个呢,都是资源不足。都是由于资源不足导致的问题,那你想如果说你的数据量比较大啊,我也没有出现这个。数据新写。啊,同时呢,我也没有访问第三方数据库。对吧,那这个时候呢,如果出现反压,那它必然是这个资源导致的问题。对吧,它必然这个资源导致问题,这里面呢,我们就不去深究了,因为这里面就相对来说比较专业一些了,大家呢,就是因为现在我们的前面像这个。
19:00
GM和GC已经砍掉这个课程好久了,对吧?啊,那这里面呢,会涉及到就是GC方面的一些东西,对吧,要分析这个垃圾回收的日志啊,这个呢,我们就不深究了啊,不深究了就说呢,那我告诉你怎么去解决这个问题啊首先。像负载不均衡这个问题。敷点不均衡呢,是舒心结这种问题呢,其实比较好解决来比较好看啊,不是好解决,解决呢,我们到下一章再解决对吧,那点开点开好以后呢,你看这个反应,你发现一个什么问题,假如说呢,你这边任务很多啊,有很多个任务可以吧,假设啊有很多个任务。那么呢,它是红的。诶,它其他的都是绿的,好,就只有这一个啊,这个是红的,其他的都是绿的。如果是这个现象。那你就知道了是什么。什么问题导致的反应?是不是数据倾斜问题导致的反压呀?
20:02
有没有问题能理解吗?就是这边呢,这个啊,看这是什么,这是sub task。对吧,这是萨塔,因为我们变一度是二,所以它有两个任务,那其中有一个反压了,有其他的都没有反压,那是不是树立倾斜导致的。对吧,诶我们可以反着来对吧,我们可以反着来,首先呢,我们排除掉这个数据倾斜呢,因为数据倾斜它最好定位对吧?好,那这个问题怎么解决呢?到下面解决。第三章我们专门说数据信息问题,可以吧,好,这数据信息好,那第二款假如有同学说我不是,我所有的都红了。对吧,我所有的都红了。所有的都是红的,那怎么办呢?对吧,这个时候比如说这个map,对吧,你要打开这个算子看一下,看他有没有跟第三方交互。看这个算子是不是访问了第三方数据库对吧?好,那如果确实是访问了第三方数据库对吧,那大概率呢,是跟第三方交互,也就是说我们最后一个问题点。
21:06
在这有外部依赖导致的问题,对吧,那这个我们怎么处理,怎么优化,大家告诉我。如果是map啊,但是下游是绿的啊,他自己全红了。下游是绿的,它自己是全红的对吧?啊,那这边。我一查发现呢,他有这个。访问第三方数据库,那我应该怎么优化呀?哎,彪总已经说了对吧,啊这个。不能不知道吧。对吧,这个不能不知道吧,对吧,那肯定是旁路缓存加异步IO是不是啊。是不是一个旁路缓存一个EIO啊。对吧,旁路缓存和EO2种解决方案吧,好,那接下来第三种啊,就是如果我呢全红的。
22:01
全红的对吧,下游是绿的,它自己的全红,我发现这个里边他也没有什么。他没有。访问数据库。啊。他没有访问数据库,那你就不用想了,那是什么问题呢?资源问题。前面四个其实讲的都是资源问题啊,只不过从不同的方面去发现的,对吧,用了各种专业的关于Java虚拟机这个工具。啊,用的就是工具对吧?哎,那呃,我既不是数据信息,又没有访问第三方数据库对吧?那剩下的资源问题对吧,就归为这三类啊你就要不然呢,你就提高这个变异度对吧,要不然呢,你就提高这个内存对吧,或者说两个同时提高。对吧,你肯定之前资源给小了嘛。对吧,没有做这个压测一般。是不是啊,没有做这个压测。
23:03
然后呢,或者你做压测,你按一千一一千条数据每秒钟,然后呢,真正来数据的时候2000条对吧,那肯定不行啊,加机器对加机就完了,所以说呢,我们不用去关心,哎,这个资源到底是怎么回事,对吧?我们呢,从另外的两个方面去排查,第一个先排掉数据倾斜,因为它最好定位。啊,他最好地位,然后就看外部依赖对吧,我们看有没有访问第三方数据库啊,那最后呢,剩下的那就是资源问题了。对吧,啊这个啊,面试官优化我加机器对吧?啊可以啊行,这是我们关于反压的原因总结跟处理方案OK吧。
我来说两句