00:00
好,那接下来压测的方式啊,之前我们说了压测方式比较简单啊,从这个卡法当中先积压数据,然后开启弗Li任务对吧?啊,先加当然也可以啊,除了这种方式,当然也可以自己写这个生成数据的脚本对吧?啊,生成数据的脚本来做这个事情对吧?好,这是我们所看到的一个反压的一个,呃,压测的方式主要就是看会不会产生反压对吧?那接下来我们直接聊反压啊,直接聊我们的一个反压啊好,那反压呢,一般来说就是数据量太大了,处理不过来了对吧?啊,所谓的叫反压,那flink的反压跟Spark stream的反压还不一样啊,那Li呢,是这样子的,比方说我整个的数据流。前面是福卡对吧,这个是卡夫卡。然后呢,这边。是S卡夫卡source读取数据,然后呢,中间transformation transformation map filter等等乱七八糟的一堆,对吧,反正呢,最后有一个think。
01:07
啊,中间呢,是。对吧,到这儿。电脑都是transform,可能还有更多对吧?好呃,那反压是怎么发生的,主要在于大家之前接触那个be对齐的时候知道,其实每一个数据每一个数据啊。每每或者说不是每个数据吧,每一个这个task啊,对于我们每一个这个task而言,它都有自己的一块什么小内存吧。他说你前面是两个边度对吧,你前面是两个并一度,我前面是两个并一度,现呢我有两块内存。对吧,他把数据呢,放在这里边,包括wordmark那些东西呢,信息也要放在这里边,那它有两个那一样的它也有。那这是什么意思呢?每一个task会有两块缓存。
02:01
有两大块缓存啊,那前后这一块。前后各一块,这个呢是读缓存,这个呢是写缓存。一个读读过来的数据呢,我先放到这个缓存,对吧,那写的数据呢,也放到这个缓存。啊是这样子的,然后呢,从这个缓存呢,写给你啊,缓存写过来对吧?啊,当然你们俩可以有交交叉啊,假如说这中间是一个替带啊,是一个批带操作,那当然有交叉,这个无所谓的啊,反你知道一下由上游传盖下游,那反压是怎么发生的,是这样子的,它会引起什么样的问题,为什么我们说反压会引起这个,呃,数据的延迟会增高对吧?会产生卡夫卡的数据积压,因为这样子啊,那首先假如说这个任务当前这个task处理不过来了,对吧,也就是说中间呢,我要做计算,那我处理不过来了,处理不过来怎么办?你新来的数据你就往那放着对吧,我有时间了,我再处理好,直到它放满了怎么办,大家就知道了,我让通知上游吧,说你不要给我了,我没有内存空间来放数据了,我也没处理完对吧,你先不要给我了,那他是怎么样,他就写不出去了呀,写不出去了,相对来说他这不就满了吗?是不是他这就满了对吧?他这个位置就满了,那这个位置满了写不出去了,他自。
03:24
自己还有人。他发芽。对吧,我也满了,我就停止计算了,我也不计算了,因为我计算了也没用,我放不出去了,所以将来不计算,那计算上游还给你发,是不是你这边就满了,但是你这边满了,那同理他这块就满了,然后这满了满之后是不是。Source注意这是source啊,SS对接卡夫卡的时候,是不是主动接收啊,是不是主动拉取数据啊,主动的吧,SS主动的,那我这边都满了,我还要去拉取数据吗?我就多拉取了,一旦你不拉取卡布卡数据是不是积压了,积压了是不是延迟会越来越高。
04:01
对吧,所以对接卡不卡的这种boss啊,它会导致延迟越来越高,对吧,因为这个地方消费是我主动的,我主动消费的,不是说你硬灌给我,如果说前面这个S是主动往这推的这种方式。对吧,那如果产生反应时间一久了,就有可能内存溢出了,对吧,我放不下了,你还给我还给我对吧,我这边都堆满了,你还给我内存溢出了,但是卡夫卡不会,它只会产生这个数据延迟偏高。对吧,这是反压的产生的一个机制啊,是这样子,一层一层逐级传递的,逐级传传递的啊,而这个地方我们要了解一下啊,是怎么做的。啊,首先Spark呢,如果说要开启这个反压,那一定是基于这个receive模式,Receive模式对吧,也就是说我有一个excu专门来读取数据,一些web,它来加载数据对吧,那这边呢,有driver driver去分发任务,还有很多其他的,诶那接收到数据呢,发给你,给你去执行对吧,很可能这任务之间还有其他的任务。
05:12
啊,它有多处,它有多处,它的一个反馈机制是什么样子的,比方说我这个处理不过来了,我这个地方处理不过来了,对吧,他注意他不是说跟上游说,而直接跟谁说,跟driver说。啊,他直接跟driver说,那driver呢,通知他,哎,你就接收慢一点对吧,甚至停了,暂时先不接收了,也就是说它并非逐级反应的,那大家想逐级反应好还是直接找老大好。是逐级的好,还是直接找老大好?嗯。
06:04
大家觉得哪个好一点?逐级,为什么呢?能不能稍微说一说理由呢?啊,班长说直接好一点。
07:14
啊,有同学说立马就能知道反压了。那说逐级的理由是设置了缓存,就是允许一定气压。对,其实其实应该是逐级更好一点啊,因为刚才副总也说了,呃,我们设置了缓存,其实就是允许一定的积压,对吧,在每一个里边积压一点啊,那我们整个反压呢,就会延后对吧,因为我允许嘛,对吧你。暂时做不过来了,我就替你存一部分数据,你抓紧做对吧?啊,你做完了之后立马给他消费啊就好了啊,然后直接找老大呢,假如说任何一个XQ的出现了一点点问题,对吧,他都会影响到整个的进程。
08:16
啊,那如果主级的我就你这边出了一点点问题,你就替你分担了,对吧,他替你分担了,那我速度可能快一点,我呢内存大一点,你呢稍微有点内存下来呢,你可能很快就处理完了那。没有产生反压了。对吧,就不会产生反压了啊,其实后来看呢,肯定是这种逐级的能好一点,现在好一点,因为相当于整个系统在分摊。数据的一个积压啊,而不是说呃,这种直接找老大,直接找老大的这种呢,嗯,只要有一个人有一点点问题,就会影响到所有的XQ的速度。对吧,其实其他的可能都没受什么影响,好那这样就不太合适了,对吧?好影响我们整个这个时间可能一下子就好了,一下坏了,一压好了,就是这个exq的有一点点小问题,一下好下坏,一下好一下坏,对吧,那直接找老大通知了,对吧,那如果说我们逐级的,那这个节点一下好一下坏一下好一下坏的时候我上由于上游有多个可以帮助我们做分摊,对吧,我不会产生这个反压啊,一下就处理过来了啊是这个意思啊,好,这是我们所看到的一个。
09:26
反压它是怎么来的,对吧?啊,它是怎么来的啊,那接下来我们就看一看,在反压这个东西如何去定位,如何去定位啊啊,那这边我们可以看到什么呢?来我们给大家写一个任务啊,来看一下啊在这边。另test啊,我这个任务呢,要把它运行起来啊,这边还是PSM。对,Execution environment下这个二。
10:03
天天微点S我们的。No,我设置为二吧,老说设置为二,看到二加位得到,诶不是这个不需了啊呃,然后接下来呢,我们从端口读出去填到的string哈杜202对吧,然后就是端口到一个stream,然后接下来呢,Take stream点呃,比方说我先做一次。Fla map,我把这个任务呢,可以做多一点啊,然后这边呢,我们返回值是string啊,我也不返回一个错了啊,直接返回一个string啊,那这边呢,我们就直接。点spli,假如说我们按照这个逗画分割得到一个words对吧,然后呢,Words或循环,然后呢是connection,填connect,然后呢,把这个word输出好,那将下来呢,这个我们就得到了一个word s对吧?然后拿到word DS点要用map。
11:17
另为一个map方程,那这个地方呢是一个top two,那我们就写开一点,就任务点呢写多一点啊,多一点算子two。然后呢,Three第一个好,这边呢你一个top two,然后呢,S是我们的数据,然后呢写给个一,这个呢得到一个word to one的一个DS。好,那他呢,我们去做。对,这个地方是点F0这个单词我都没改了啊,就直接叫这个名字了,对吧?好,那这呢是得到一个K的swim,拿到k swim呢点呃这边呢,我们就啊啊算一得到了result,然后result做一个打印print打印呢,我可以设置它的一个变度为打印嘛,对吧,因为点excuse,好这个呢,我也就不给名字了,对吧,不给名字了,那那接下来呢,我要改一个东西啊呃,改于什么呢?我把这个resource里边把这个捞缩件改成ino,我等会要找一下它这一个端口号,这者我加了一个,加了一个这个依赖啊加了谁呢?加了这个。
12:44
我加了它叫flink runtime web对吧,这样的话我们就可以在本地启动的时候,可以打开它的一个web UI去查看,因为我们接下来要定位这个问题,那到打开web UI,其实它的一个web页面上面是可以看到反压的,是可以看到反压的啊不果我们可以用那个监控工具对吧?监控工具呢,现在已经不讲了,但是可以跟大家说一下叫这个。
13:09
普罗米修斯啊,叫普罗米修斯,其实对于弗林本身,它是自带了普罗米修斯的啊。另一个,所以他可以用普罗米修斯进行监控,那我们监控工具就叫这个叫普罗米修斯。对吧?啊,它是自己有这个插件的啊,他自己有的这个我们知道一下就行了啊,啊当然那个视频呢,会发给大家包括资料啊,你到时候自己去玩一玩,这东西很简单啊好,那接下来呢,我们把这个我加了一个这个包啊,就可以在我们本地能看到Li页面对吧?好来运行起来,哎,这个先不要着急运行,我们得先起一个NC-LK就是这种是吧,行了起来好以后呢我们再运行。
14:04
这就关于反压的一个介绍,和我们如何发现它是一个反压啊,当然这个地方我们通过外部UI来看啊。通过web UI来看。只是说我们自己去看的,但是一般来说我们还是要用到这个监控。诶。这个地方。他有问题是吗?我跟他logo附件没生效哎。呃,那个佛剑没生效,那这样吧,我去这样啊。Max rere wrong time mode。自动对这个不是啊运行模式,然后我看一下还有一个。
15:09
音度配置信息,我要指定它的一个端口号,哎,那个参数有同学记得吗。有的同学记得它的一个指定那个参数,就是web端口的一个参数啊,那这个还比较麻烦一点,因为我们这个logo键现在不生效了。这很奇怪啊,那这样吧,我应该是配置了很多东西有这个依赖冲突啊,导致这个劳佛键盘生效,那没关系啊,我们可以给他干什么呢?呃,拎出来一个module啊,叫g Mo test,我再把那个任务拷过来啊。对吧,我这边。把我们刚才这个test里边的这个二对吧,考到这边来不就行了吗。
16:02
这个比较简单对吧,直接拖过来。拖过来之后呢,当然我们要添加一些依赖,要不然它会报错对吧?Depends,好,那我们想一下要添加哪些依赖啊,首先flink Java。Link-Java对吧,然后balanceslink啊streaming好吧。好,然后另一个还有一个run we。Web呃,啊还有呢,我看一看啊,还有什么东西啊,那web,呃。啊,Link的一个client客户端保要在本地运行,对吧,Link。TEN01好,那这个就是fli基本的一个所依赖的一个包了,对吧?呃,那这边呢,我们看一下它呢,就倒过来了,对吧,然后接下来呢,我把这个还有一个东西啊,就是。
17:13
Time,然后老考一啊这。啊,音符好行,那我把这个字重新运行一下啊来做。他没有日志的话,我拿不到那个东西了。他还是有这个冲突吗?稍等啊,我去拿一下这个。嗯,这个捞佛近呢,就不用了,Long time more test,对吧,More real time,然后呢,我把这个log佛戒的依赖给它拿过来啊。老附件的依赖啊,拿过来,然后接下来呢,我们重新运行一下啊。
18:04
好了,这个就有了,对吧,有了之后呢,我们看一下它这个端口号啊,它端口号呢,肯定是local host就是它对吧,点开啊这个web UI就有了。啊,外部UI就有了。Create local environment with web UI小助手很棒。啊,你说晚了,我已经把这个通过捞店找到了,我刚才就问这个东西啊,刚才没有人说现在已经晚了,对吧?啊,不用了,我已经找到了啊,这个无所谓的啊,都行啊,各种方式都行,然后呢,这个是运营的任务,对吧,然后呢,切到这个任务当中来啊切到任务当中来,这边呢,其实可以看到它的一个车炮。对吧,可以看到它checkpoint历史啊,成功啊,当然我们没有做拆point就不会有这个啊,那跟重要的我们要看什么呢?看他这个反压那在哪呢?在这啊点开点开之后往后看啊,这边有这个什么累加器啊呃,Sub task对吧,看一下这个当前任务啊,Task manager是谁,日志情况对吧?Whatmark传递也能看得到对吧,然后接下来还有。
19:09
反压。在这看见没,这个外部页面上面是不是可以看到当前这个任务。它的一个反压情况啊,反压情况呃,按没有啊,注意当我们点了之后,它才会去开启反压的一个检测,我们到稍微多等一下,诶有了对吧,那这个地方如果是绿色的后米没有反压,如果是红色的,那说明当前这个任务有反压。当前这个任务有反压。啊,这样的东西啊,而且假如说我那个故意搞两个病因度,大家能看出来它是对于各个病因度去做不同的反压判断的,因为有可能我有十个病因毒对吧,这边十个十个好,那这边其中一个反压了,那往往就是数据倾斜导致的。
20:01
对吧,那往往就是数据倾斜导致的这个地方呢,可以看到反压,那除此之外其实还有一个。监控项看见没?就是分类当中不光有这个,还有监控项,那监控项比方说它分零点和一点,什么意思呢?因为当前就有两个并度对吧,有零号分区,一号分区,所以叫零点一点,比方说我们给大家看一下啊呃,这个里边我们去。0NUMBER record in对吧?我们看一下零号分区,它进来多少条数据啊?呃,零号分区叫out po use,这个叫什么?Out,看见没?还有个音谱。还有一个out for,对吧,就是我们所说的,对于每一个任务而言,每一个变异度而言,它都有两块内存。一个是音谱把斜往上写的,这是。红的写的,然后然后呢,还有一个out for往出写的,往外写的吧,In和OUT2块缓存就看哎,这两个缓存的一个使用量,那我们肯定是没有用对吧?啊,那这边我们可以把它点上,可以那个out上。
21:15
对吧,啊,这个地方啊,它都是百分比零一啊,0百分一就是100%了,对吧?用了多少啊用了多少,这是零号分区的,当然我们也可以看一号分区的,比方说我们看一下一号分区,呃,总共有多少条数据进来跟这个保持一致啊,然后接下来呢,看一号分区它的一个啊是否反压啊,是否反压这个地方也能看得到,对吧?它都是监控项啊,所以我们普罗米修斯这里边东西都能监控到。所有任务内部的东西全部能监控到啊好,那接下来呢,这边还有这个,诶,刚才我们选的是inport use对吧。呃,这个啊,然后呢,还有一个out for use,对吧,我们就结果一样out for use啊,就是它一个使用量是多少对吧,现在都是零,因为我没有输入数据,比方说这边我来一个hello。
22:14
二对吧,硅谷走一下,我再来一个HELLO2LINK好,那这个时候呢,呃,稍微等一下这个地方呢,就会变。诶,有了两条数据的第一个分区,两条数据,第二个数据,两个数据对吧,因为它是属于Fla map map,那这个是不是前面看啊,前面我们发送数据,它用的是什么,大家能看清吗。用的是什么啊,Rebance是不是,哎,他用的是rebance啊所谓的reb呢,轮询,那我总共。出了这个数据啊,那你这边肯定是一样的,两边都一样对吧?啊,那这个这个就完了,我把这个放了之后呢,像没了监控项,对要重新选了,重新选了对吧?啊因这个地方呢,还是零啊,比方说我们多一些数据啊,我看一下能不能让他到那个他他应该很快处理完了。
23:16
应该很快处理完了,对,所以说它的一个进口进的缓存应该一直都是零,不会有对吧,但是它的一个数据量不一样啊。数据量。嗯,它的一个读取的数据量,这边这边其实大家可以自己玩一玩,有时候选这个内容在这选不好选啊。啊,Number base in吧,假如说这个是BA对吧,从字节数组上说的,当然还有record对吧,都可以看到啊这个东西,呃,那web UI不适合做监控啊,只是说临时查一下,因为外部UI就刚才我们看到我把这个一关,对吧,我重新点一个,再点进来,它怎么样,你又得重新写,又得重新去看啊,所以它只能临时去做一个什么呢?做一个查看,而不适合永久的,所以我们要结合这个监控工具,而监控工具呢,就可以一直查这个内容,一旦发生问题了,对吧,假如说反压了,诶报警,他可以去报警,就这个东西啊,这个知道一下就是如果发现了就是监控,就是通过监控,没有什么其他的。
24:27
啊,没有其他的对吧,好,这是我们所看到外部定位反压的就在这块对吧,而且排查的时候啊,就像比方说刚才我们看到这个任务来这个地方呢,它这个地方有什么,有Fla map和MAP2个吧,对吧,那到底谁碾压了,所以往往来说呢,我们发现这个地方反压了之后,我们要把这个裂给它干什么,拆开。把这个列拆开。把它拆成两个不同的任务,我们具体看一下到底是哪一个算子出了问题,这个能理解吧?
25:04
就是关于拆开这一步操作能不能理解,那比较好理解是不是。所以你要具体的找到。到底是哪一个嘛,对吧,所以排查的时候呢,先把这个操作链。禁用啊,全局禁用,让每一个操作独立的形成一个任务对吧,然后呢,方便咱们定位数据对吧?好那之后呢,看到这边是这样的,这是它的平度。对吧,如果产生反压了,他就这样子。这样对吧。的比率什么比率一都满了,对吧,这个0.970.97,那这边呢,说了00.1啊对吧,0.1~0.5是漏,然后0.5到一之间呢是海。嗨。对吧,就是高这个。啊,就高中间呢,还有一个黄色的一个状态的一个漏,对吧,一个漏就是0.1~0.5使用量,那个内存的量就是呃,前后不有内存嘛,对吧,它这个使用量。
26:08
没没超过0.5的时候都没有这个反压对吧,但是有一些警告啊,黄色警告对吧,你可能嗯,本来我来一条数据处理一条,来一条处理一条,但是你都超过了10%了,用的内存对吧,所以它有一点小小的警告啊好,这是我们定位啊,我们定。
我来说两句