00:00
我们来看第五章。教本的一些优化思路。首先第一个呢,咱们前面谈并行度的时候,也谈到了这个压测的问题。那么压测的方式呢,咱们也说了很简单,就GP数据,然后呢,再开始消费就可以了,那这个数据来源我们前面也说了,可以是生产数据,你啊处理一下再过来测,或者说呢,自己造的数据。那么往往自己造呢?你可能还要写一堆代码,不想写也可以,你可以利用一些工具啊,比如说呃,比较通用的什么data factory啊,Data faker啊,前面两个比较通用,那后面这些也都可以啊,甚至有一个整体的。Benchmark,像什么next mark jater都都可以。那么。关于这一点,我想介绍的一个就是咱们flink一点一开始就提供了一个内置的连接器,连接器。Generator。
01:00
啊,数据生成器,通过这个咱们能够很方便的来造数据啊,所以在这里呢,给大家介绍一下。主要是方便咱们进行测试,那么首先它分为一个data stream的用法,还有一个呃,Circle的一个用法。对吧,那这边呢,咱们直接看代码就行了,这就不如提提包运行了,就看一下效果怎么写。那我们看一看啊,首先第一个咱们在at source的时候,它是提供了一个叫数据生成器的一个source。你看。这个S。他是继承了一个。并行化的数据源。还有一个。关于check,你不想自己写,这里不是有吗?对吧?好,那么接下来呢,它支持两种,一种叫随机数,一种是序列数据啊,两个我都写了,随机数呢是很直白,就是它核心逻辑就是用随机数来做的,另外一个呢。
02:08
是序列,什么叫序列啊?12345678,这是不是一个序列,而对它是一个自增序列。满足你不同的需求,那这边我是定义了一个实体类叫order in for,对吧。就很简单的字段。就这四个字段,还有不同的类型。那么我们看看这怎么写呢?很简单。我们只需要。重写一下这个方法,为什么呢?因为你想要你的数据类型,这个它内置的几个就是很简单的,像弄类型,硬类型,什么类型那些有啊,给大家看一眼吧,这个所谓的generator。啊,这是官方时限内。在这里面它提供了一些比如说int generator,什么thought long类型的,Bit类型的,Float类型的,那每个里面只需要重写一个方法叫。
03:03
啊,然后呢,定义一些逻辑就可以了,这个也一样啊,你看N。如果你只需要单纯的一个数字或者一个数据,那用这个就行,那如果是你封装了一些类型,那你就自己写一下N就行了。你看new order inport,然后呢,我。这几个数我就取随机数对吧。就这么来写就行,那这个的好处就是比你自定义一个来讲呢,省略了很多那个写的过程,比如说你是不是还要考虑,呃,我这个状态该怎么来写,对吧,要实现那个checkpoint function还要写它的两个,一个恢复快照,呃恢复状态还要写一个对状态做快照的方法。另外呢?呃,你还要定义那个cancel那个方法对吧,还要自己写个循环来怎么来造数据,那这有了这个就不用了啊,它很规范。你直接用就行,这个可以造一个随机数,那后面这种序列的。
04:04
生呢要传一个数啊,就是序列,比如说我这边的是100,我生成这什么。那接下来呢?里面它同样提供了一些呃,简单的生成器啊。比如说弄类型的int类型的T类型,这种是对于你造的数据是这么简单的来讲,就是一个int,或者就是一个。这种你可以直接调用就行了,你都不用重新写,那我这边是想要封装的po类型,那没办法咱们自己写,但这一块就很方便,它里面有一个values toit,这是一个队列队列,双端队列,这个是一个双端队列。好,那么基于这个双端队列呢,我们看看。我们可以pick,也可以直接拉出来这两个应该用户队列都知道P是什么呢,取出值,但是不删除,也就是说这个数据还在,那这个是。
05:08
方法是取出值,并且从队列里面删除啊,那同样它还支持很多方法啊,给大家看一下。可以还可以去添加对吧,还可contain还有获取第一个,获取最后一个。等等等等。为什么叫双端队列呢?咱们队列是不是先进先出啊?双端队列就是你可以从头进从头出,也可以从尾进从从尾出,就两个方向它都行。对吧,你像这里pick也好,Power也好,它都有分为post或last。还可以push什么什么等等,好,我们这个队列就不聊了,那其他要随机怎么办?不想要序列,那你就定一个随机器呗,啊,然后去随机就可以了。我们看一下效果吧。
06:02
就你看,简大大简化了你的开发过程。呃,这是data最API,如果是circle的话,那就更简单了,简单的令人发指,来,我们先试一下呗。好,我们来暂停一下。那首先咱们上面造的这个是一个order对吧?O,你看几个字段值都有了吧。当然这个全是随机的,没什么好看的,我们看看这个UR这个序列是什么意思。你看我的序列范围是一到100万,那第一个字段我用的是PE。也就是说取出呢。啊,不取出读对吧,把它的数据读出来,不取出还在不删,那这个是不是取出来删掉啊,也就原来队列就没有这个数据了,那现在有个什么规律呢,你看。我的第一个字段ID跟U的ID是不是一样的?而且你注意看这个UID是不是递增的。
07:01
他应该是从最开始开始,一开始递增啊。就他们指定的范围一直递增。看来看起来是这个效果,那么如果我把第一个也改成这个。拿出来不放回去。来,我们再看一下。它的一个区别。好,暂停,那么大家注意看。这两个用的都是取出不放回。然后呢,你看这个ID。是不是跳的呀。零变到二,二变到四,那135哪去了,在这里。对吧,其实很简单,你看第一个,咱们从这条开始看吧,好。第一个属性拿了一条值,好是这个501。
08:02
第二条第二个字段也取了一个值502,好,接下来到下一条数据还要从这个对接里面取,还剩谁啊,哼,就剩503呢,也就是说白了要提醒一个什么事,你要调用的方法,你要注意要不要删掉啊,就是拿出来数据还会不会删掉啊,而且咱们这个序列是你所有调用的地方都可以共用的,都是共用的这么一个队列,这么一个双方队列啊,所以我刚才写的是pick啊。就是这个不会影响队列的数据。然后另外让这个自增就可以了,这个是data stream的写法。可能大家可能感受还不是特别明显,那你看看circle。嗯。A,他A在哪呢?好在这儿。牲口的写法啊,可以说就非常简便了啊,非常好用了。
09:01
那我们看啊,这边创建了一个表环境,那我定义了一个circle,你看怎么写啊,Create table。啊,名字自己起,字段自己定义,你想怎么写就怎么写啊。接下来就是位里面的属性了,首先连接器指定为数据生成器,接下来还可以调一个什么,每一秒钟生成多少行,这个速率你是可以控制。速率可以控制,当然对塔是正API也可以啊。嗯。好,接下来就是第一个字段,是不是叫ID啊,你看I did did可以指定什么呢?类型,类型是可以是序列就自增序列,或者呢,随机都可以。那如果是序列,咱们就要指定start跟end它的序列范围,好,接下来看第二个字段,哎,我想让它变成一个随机,对吧?这是一个U的ID,那就在这里。它的类型我用的是随机,随机呢它就应该也有个随机范围,它是最小最大值。
10:04
再往后,Total amount。这个字段类型我也给随机啊,给一个范围,说白了它是不是更加的灵活一点对吧。那就很方便,比如说你要测试一下join,呃,测试一下呃,一些什么情况,你定义一张临时表就超级简单和超级方便,你想序列就序列,你想随机就随机啊,你想控制速率就控制速率,你想一共生成多少条也可以有一堆参数都可以整啊。那同样的下面也一样对吧。好,那咱们这边呢。直接查这一张数据生成器照的,我们看一下。数据出来了,那么大家可以看到,你看这边数据造数据就特别快了啊。
11:07
那这样我们就很方便的可以去测试一些circle上的一些用法。这个呢,就是可能有的人不知道,咱们给介绍一下造数据呢,现在有非常简单的方式啊。数据生成器是内置的啊。
我来说两句