00:00
上节课我们已经实现了这部分代码,那当时的这个测试呢,我们是直接跑了一下,从文件里边读取出来,然后直接就就运行了,那在实际的这个过程当中,如果我们想详细的测试它的一些行为,我们最好还是要干什么啊,还是把它转换成这个流式的输入,然后一条一条输入,看看它的情况是怎么样的,所以这里边我可以把这个数据源换成socket源。另外呃,这里边是这个7777,那下边这里边同样换一条。呃,这个我们还是叫做receipt。Even。好,然后接下来这个端口我们改成一个改成一个8888,好啊,这样的话,到时候我们应该是要开启两个NC对吧,然后分别去发数据代表我们的两个源,然后接下来呢,呃,那那那相当于就是说这个一边发一边看这边的处理的一个结果是什么样的,好好接下来我们做一个这个测试。
01:20
呃,这个是一个7777,我先把它停掉,因为接下来可能发送的数据会。基本上还是跟之前一样啊,但是大家看到的东西可能会略有不同,再去起一个bash。好,我们重新再起一个这样的东西,另外还得要这个数据对吧。这个数据在切换的过程当中,可能还有点儿麻烦啊,呃,这样吧,我们自定义一些数据放在一个测试文件里面好了,这样会比较好,对不对?呃,比方说我这个copy几条receipt的数据。
02:05
然后copy几条order的数据。如果我们这里边这样去做测试的话,大家会发现其实并不需要这么麻烦,对吧,不需要,这里边就是这个这个字段这么复杂,万一这个匹配不上的话,还还很麻烦啊啊大家看这个都匹配上了啊啊,所以有些匹配有有些不匹配,所以我们就看一看,按照当前的这个状态是什么样子。先把这个提起来。接下来我们就按照这里边时间戳的这个顺序,一个一个来试啊,我们先试这个顺序的状态。呃,那这里边先来,当然这个create没有意义了,对吧,我们其实更加关心的都是配的东西啊,所以。7777这边先输入。
03:00
四三啊,这个都完全没用的,都被过滤掉了,然后主要是要有配事件的这个数据,四四,然后后边是四五这里来了一个。哦,四五这个还比较奇怪,我们把这个改过来吧,它是modify是吧,把这个改成配。然后接下来大家看到这条流里边其实也有一个四五,这个是8888这边对吧。然后接下来诶,大家看到其实这里面应该有一条数据哦,他跟他的那个号还不一样,所以说现在没有输出对不对,然后接下来四六。四七。大家可以看到四七这条数据是不是就是这个ID是跟上面一样的啊,所以当四七这边这条流输入四七这个数据的时候,已经可以看到我们直接检测出来,他之前已经来过pay事件了,所以是不是就有一条这个match的一条输出,主流就做了一条输出对吧?啊,这是这样的情况,然后接下来。
04:22
呃,大家看到这个到四八对吧。诶,大家看四八这条数据是不是也是前面已经配过的呀,而且在我们那个时间范围内啊,它是直接可以输出的,接下来来这个四九,四九应该是上面。五零下边再来一个一个receipt啊,那到目前为止大家看到其实这些数据就都已经能匹配上的,就是这么两条对吧,然后接下来会出现什么呢?是不是这个时间戳会朝前移动啊呃,我们当时给的那个是几秒钟来着?
05:04
是五秒钟对吧,两边都是五秒钟,所以这里边如果要是有我们已经出现在这个order pay事件流里边的数据,而另外一个地方没有的话,大家会想到如果这个。这个even time啊,这个watermark往前移动的时候,是不是到五秒之中之后,应该要触发它这个超时的那个不是超时啊,没有匹配成功的那个报警啊,所以大家看一下到底是什么时候会触发报警,比方说这里边,呃,大家忽略这个CHS的信息啊。配的话,前面两个都已经成功了,是不是最后这一个,呃,在这边没有做过这个到账的确认啊,所以大家想什么时候他就应该输出一个不匹配的一个一个信息呢?它是849,呃,有同学说那五秒钟嘛,那应该是854,我们看一眼,诶854这边没信息对吧?啊,水位没到,那大家会想到,哎,我们当前应该是没有设置那个waterwack延迟对吧?那大家如果不相信的话,我们再来一个五五,诶五五这里是不是也没有任何的反应啊。
06:19
那那这个东西到底是应该到什么时候才才输出呢。然大家觉得是必须得要配,是不是注意一下啊,那我们这里边这个不适配的事件来了之后,对他对他有影响吗?哦,所以大家觉得这个是把它过滤掉了,没有没有影响是吧,那我们来一个这个配的事件。呃,我们用一个别的吧。这里边854对吧。诶,大家看这里边有影响吗?还是没影响对不对啊,大家要注意一下啊,前面其实它的这个时间戳是可以影响到我们后边的这个watermark的进展的。
07:11
为什么呢?因为在产生water map的时候,它是直接从S任务那里边去注入进来的,所以后边其实我们那个filter或者什么样的是没关系的,只要数据来了之后,就会根据它的时间戳生成对应的,按照我们的定义的规则生成对应的water mark啊,那这里面大家看这里边五四也还是没有没有输出对吧?那有的同学说可能得大大于他五五还是不行,这是为什么呢?这里大家要注对,有些同学已经想到了我们现在两条流对吧,这条流的water mark应该已经找到五五了,但是这条流的还在,还在五零对不对?那如果对,那后面我们connect时候是以慢的为准,那所以后面我们做操作的时候,为什么它还没关呢?因为我们当前时间只到五零啊,你前面的那个这里边的这个配它是四九,当然不需要关对不对啊,这里边就就还等着就好了嘛,所以大家会想到怎么样就会被关。
08:16
呃,这个我最好是来一个这个完全不相关的一个一个数对吧。比方说这里边我们进行到五四。这里又来了一条支付数据,哎,大家看这里是不是就会有一个unmatched receipt生成啊,啊,当然这里边这条数据,这是哪一条输出了呢?大家看是这里四五这条数据输出了对吧。这个大家还记得当时我们给的那个延迟是多少吗?看一眼,回头看一眼啊。上下两个都是五秒,对不对,就是如果这边先先来的话,等那边等五秒,如果那边先来的话也是等五秒,好我们看一眼这个它为什么会出现这样一个行为呢?当前的这个water mark已经涨到了五四,对吧,所以整个我们当前所有的。
09:19
两两个任务都已经找到五四了,这个这边也是五,这边是五五,这边是五四,所以现在后边去connect做process处理的时候,Water water mark就应该是就应该是五四,对吧?那如果这里是五四的话,那那上边这里大家看一看哪一个就可以把那个配饰件要关闭了。这里输出的其实不是,这里输出的是那个all match的receipt对吧?Match的receipt的含义是当前的这一个没有匹配到它对应的那个order pay对不对,是在这里边第一个啊,这个确实超时了,因为它是四五嘛,对吧?这个当然是前面已经超时的一个状态,那后边的情况呢,后边是不是这个是不是已经匹配上了呀,这个SD这个已经匹配上了,对不对,第三个也匹配上了,那第四个是不是五零的话,他要超时,是不是得等到等到五五才能超时啊对,所以这个时候他还没有输出,那大家会想到,那为什么这边没有输出呢?
10:29
啊,这边主要的问题在于我们后边是不是刚才。我们本来想看它应该是一个超时的一个状态,对不对,但是后天我们这里边同一个ID来了好几次配对吧,来了好几次配之后的结果是什么呀。这里边我们是不是本来这里边处理的时候根本没有管其他的情况,如果要是说这个配每次都来,然后每次都还没有这个receipt的话,是不是相当于相当于每次都会更新啊,所以现在当前的这个这个订单我会认为他是在在等什么时候才失效,他是不是要等到最新的这个五五再过五秒钟之后才会失效啊,哎,所以这个就比较麻烦一点,就是刚才我们没有改这个这个ID啊,所以这里边我们还是把它也做一个。
11:27
换一个别的。随便给一个啊,然后这里边我们继续往前进,可以给一个啊,对六零大家会想到。诶,这里边我们先给到五九吧,我们看一看就是两边的这个行为,诶什么情况。哦,大家看这里边给了一个之后没动静对吧?哎,这个分屏确实看的不太清楚啊,这里边没有任何的输出,然后我们继续把这边更新。
12:13
呃,这里边,哎,大家想,我这里边如果更新到五五会有一个什么效果。如果更新到五五的话,大家看一下。哎,是不是又输出了一个on match的PA啊?这个配是哪个?是我们前面这里边已经定义好的这个这个,哎,大家看这里边是这个855对吧,输出的是这个,为什么输出的是这个呢。这个时候已经有点乱了是吧,稍微稍微已经有点乱了,那这个这个五五为什么会会触发一个一个前面这个on的pace呢。
13:05
明明我们这个应该是到六零的时候才会才会去出发啊。对。大家想一下,因为之前我们定义的那个定时器在在我们覆盖这个后边来的这个状态的时候,是不是并没有把前面的定时器删除啊,对吧,代码逻辑里边是不是有这个问题,相当于还是留下了一点漏洞的,所以在这个过程当中,如果我们这里边是直接在这里去输入的话,那其实是有问题的啊,所以这样吧,刚才这一部分大家我们重新来测试一下吧,这个。对对于我们这个过程大家已经看乱了是吧,已经看的越来越越绕了,我们还是重新来吧,刚才这个数据没有准备好,所以我们先现在是重新把它运行一下。好,我们运行一下这个代码,然后进行这个流式的处理和计算。
14:07
我们把它这个放在输出的这个结果放在这里啊,然后我们开了起了两个NC,诶,这里边这个8888好,果然这边给报错报错了啊,上面是不是也也没起好先把。我们现在启动程序去做一下流式输入的处理和计算。这边启动一个,启动两个,呃,NC的这个服务器啊,我们发送数据,分别发送两条流的数据,然后首先我们这里边给一个。其实create大家会知道它根本没什么用,这里面我们先输入进来,然后接下来给一个。配的视线是一个844这个时间点的一个配,然后接下来呢,845又有另外一个订单的配。
15:02
同样845的时候,在另外一条流里边检测到了一个微信到账的一个结果,对吧?呃,但是大家看这里边并没有匹配到东西。呃,这是因为这个ID是不是在上面没有出现过啊,所以他俩没有匹配的东西,然后接下来我们再有一个846CREATE了一个东西。接下来。呃,847是微信这边又有一个啊,又有一个到账信息,这个时候大家看到是不是匹配起来了,当前的这一个ID和前面844时候al支付的这一个,呃,这这一个匹配起来了,所以在主流里边输出了一个支付匹配的信息,然后接下来848这里边又有一个,这是支付宝支付的一个一个到账信息,这里边是不是又匹配起来了,因为当前的这个ID是不是跟哦,我们上面那个后边第四条输入这个支付信息,845的时候这个匹配起来了,所以他俩哎又输出了一条信息,然后接下来849这里是另外一个order的pay支付信息,还有850另外一个交易的到账信息。
16:23
因为他们都没有匹配起来,所以这里边没有任何输出,对不对啊,我们的问题在于什么时候他们就会就会超时呢?哎,超时这个过程,比方说这里边。但大家想一下啊,到目前为止,前面这两个是不是匹配起来了,然后这边是这边是第一个没匹配,中间两个匹配起来了,对不对,然后最后一个没匹配,那分别这里边的最后一个和这边的第一个最后一个他们分别什么时候超时呢?诶有同学说这里边对,就是water加定时器延迟嘛,我们现在watermark没有设置啊,最大的延迟那是来一条数据就代表water前进,那上边的water进行到哪里了?549,下边的water mark50,那我们现在当前这个process任务,它的waterm时钟,呃,就是eventime时钟,应该进展到四九,对,以小的那个为准,所以这个时候大家会想到。
17:28
接下来哪个就该触发了,哪个就该爆了,最先爆的应该是哪个,哎,四九这里边有一个配单独的配下边四五和五零是不是有两个单独的这个receipt啊,所以四五那个它如果要超过我们定义的那个时间,是不是505秒钟就应该到了呀,所以接下来怎么样能触发它到五零呢?面对是不是上边的时间只要再进展一下这里到武林。
18:04
哎,大家看这里边并没有输出对吧。大家看这里边并没有输出,这是为什么呢?就是这里边如果要判断这个当前的定时器出发的话,还得再超过这个时间,对吧?哎,大家发现之前其实如果要给一个五幺的话。还是没有,嗯,下面还有,但是上面也是,诶对,大家发现下边现在还是五零,所以后边我们的这个任务,现在water还是只找到五零,对不对,对吧?所以定时器触发大家看它的这个行为啊,就是后边我们定时器这个触发的过程,应该是要掌过那个位置才能够触发,对不对啊,所以这里边下边把它也给一个五幺。大家看这里边是不是就输出了一个unmatched receipts啊。
19:03
然后输出的是四五那条数据对不对?哎,这条数据就输出了,然后接下来大家想一想,如果我们还有哪一条数据需要去超时呢?四九这条数据要超时,它是什么时候会超时。69159,诶,那那之前大家会想到我们这里边是,呃,大家认为必须得是配事件,假如说我这里边是一个create事件,能不能让它超时呢?好850,这里边我们给一个四,呃那个四九的话,大家会想到可能是五四有关系,对吧,但是五四来了之后肯定不行,对不对,然后对,如果要是五五来了呢,五五来了之后还不行,因为对还是得两条流都要慢上来,对吧,水位都得涨上来,所以接下来我们再把这边涨到五四,大家先看一下还是不行,对吧,涨到五五。
20:03
诶,这里边五五还是没有输出,我们看一眼啊,过滤了直接过滤,哎,我们看一眼这个前面代码里边的实现。啊,直接过里的哦,大家看这个分配这个,呃,时间戳和water mark这个操作是不是在filter之呃,对,是在这个之后做的对吧?哎,所以说如果说我们是先分配这个,然后再做filter的话,其实大家会想到应该这个其实是也可以影响到我们的水位的,对不对?呃,这里边是因为它放在后边了,那比方说这里边的大家知道怎么样会影响它吗?对,如果我这里边再来,只要我们过滤是按照那个。Transaction ID不为空过滤的对不对,那假如说我这里边transaction ID有东西的话,这里找到五五,大家看是不是就直接输出了对吧,而且这里边呃,他判断的就是我们当前是一个on match的pace,就是四九这条数据啊,所以是这样的一个过程。
21:10
好,那么大家下去之后,可以按照我们这样的两条流啊,这稍微有点绕,但是没关系,大家就是呃,做测试嘛,一条一条数据去输出,看看它的这个效果行为到底是怎么样的。
我来说两句