00:00
呃,那咱们现在呃,还是按照之前的那个呃套路啊,咱们先怎么先写配置文件,不过这回的配置文件咱就不再手写了啊,太浪费时间了啊,咱们带着大家回顾一下那个格式就行,然后这次咱们先复制,然后呢再给大家解释里边重要的参数啊呃,这个先写配置文件,呃,然后呢,假装咱们拦截器已经写好了,呃,拦截器的功能咱们已经明确了,对吧?啊,一会儿咱们就按照咱们的规划去写就行了啊拦截器啊,后续来写完了之后进行测试,测试之后能跑通,那剩下就是大家的时间了啊好,那现在咱们先找到那个配置文件,这个不在这个手写了,哎,先把那个配置文件先拿过来。那这个配置文件呢,相对来说就比较多了啊。来,我们看一看。新建一个文件啊,CTRLV,好,那咱们现在先呃回顾一下咱们这个最终文档上的方案是什么啊,文档方案这104的辅是这样的,卡不卡S啊,中间采用的是fair channel啊,然后后边呢,咱们采用的是h think h think啊,一个都没说,对比卡卡think啊,卡think啊这样的三个啊,行,那咱们接着往下走啊,那现在我们就看一下这个文档吧,看下这个笔记啊,这个上面south China think3个名字啊,完了之后咱们看SS这边咱们采用的是卡夫卡S,那大家应该都知道啊,对于卡夫卡S来说啊,那它底层的代码当中肯定包含什么呀。
01:25
看到它的底层就是个什么。底层就是卡夫卡消费者啊,你你如果去看普通原码,你会发现它里边也是会先拿到一个卡夫卡consumer,你就像咱们自己去写的那个卡夫卡消费者API一样啊,也是直接来一个卡夫卡S,然后呢去消费一个卡夫卡的topic,消费哪个topic呢?就是你在这儿给他传进来的这个topic。是这样的啊好,那这时候咱们去可以去看一下卡不卡S,它里边的几个参数啊,咱们打开啊。不论官网啊,还是应该多翻一翻的啊,哎,找找卡不卡槽,诶好像这个过了对吧,咱们再回回回过去啊。
02:03
这个呃,下一个下一个哎,这就是卡不卡so对吧?哎,咱们已经找到了啊啊那卡不卡so当中比较重要的几个参数啊,应该是什么?看一下第一个啊,Type类型也是全列名啊啊然后后边呢,Boostrap service啊这就是那个集群地址,然后下面呢,是卡不卡consumer的group ID啊这个ID可以不写不可以啊不写的话默认值就是通这个消费者组是吧?啊然后这个是什么,是topic,然后注意啊是什么。S。啊,这个为什么是S,因为咱们卡不卡他都知道,我一个消费者实际上是可以订阅多个topic的,对吧?啊所以说可以写S,那还可以怎么办呢?还可以通过正则表达式来reject,就是正则表达式啊regular expression啊,那这个相当于是使用正则表达式来去匹配多个topic,也是能实现的啊,也是能实现啊啊那再往下呢,就是其他的一些这个呃,比较重要的一个参数的啊,那我们一个一个解释啊,那诶这时候大家又看到一个东西叫做什么呀。
03:08
啊,Use flu event format,诶,这个大家现在应该能猜到它是什么作用了吧?对不对,那是不是跟咱们前面讲的一个参数有点像啊,哪个参数pass as flu啊,Event对不对,对不对,那其实跟那个参数作用一样,只不过咱们这边是卡布卡source,它只会干什么,只会从卡布卡里边去读,那这个参数就是什么意思啊,就是我解析咱们卡布卡record的时候,是否按照event的结构去解析,对吧?啊,其实就那个啊,这个很简单啊,这个不用再解释了啊,然后还有一些其他的东西啊,呃,咱们就不再多说了啊,然后这里边呢,我想跟大家再补充一个东西啊,这个什么东西大家可以发现啊,其实这里边咱们大部分的参数都是卡不卡消费者的参数,对吧?啊,然后下边来看一下这个地方。Other卡夫卡consumer properties就是其他的卡夫卡的消费者参数,大家肯定都知道,他会把消费者参数呢,我好多好多很多对吧?啊,肯定不止咱们上面列出来这几个,那假如说我现在想去配置其他的参数,那怎么配呢?
04:12
啊,比如说举个例子啊,咱们卡法当中,比如说有一个那个什么,呃,Auto ofet recet,就是那个earliest和latest对吧?哎,比如说我想改那个参数,我不想用类的latest了,我想用earliest怎么办?诶,它后边就告诉咱们怎么去配了啊,只需要怎么配,只需要我们在原有的卡夫卡的那个,诶那个参数的这个基础之上呢,在它前面加一个前缀就行了,加什么前缀卡卡consumer,比如说我现在想拍的是auto of outside side这个参数,那你只需要怎么办,在它前面加上一个卡夫卡的consumer那就可以了,也就是说实际上卡夫卡S当中啊,我们是不是能够配置卡夫卡消费者所有的参数啊。啊,所有都能配,这个大家需要了解啊,需要了解得知道才行,好了,那咱们简单介绍一下,然后看一下,诶咱们这个诶我都把它点开了,然后看一下咱们这个比这个呃,配置文件当中我们的参数都有啥啊,一个一个来看,先看第一个啊,这个type全列名不用多说了,然后下边这有一个by size。
05:12
啊,这个显然就是什么呀,就是我P大小对不对,然后除了P大小,还有一个跟P相关的叫做BA duration meals,诶这个参数又是什么呢。好像这个参数之前没见过对吧,那没见过咱们就得去官网上去看一看它到底是啥意思了,对吧,咱们找一找有能不能找这个参数。呃,能找到,这是by side,这是duration meals,对吧?来来看一下。这个来看能不能看懂啊,这个maximum time in Ms,就是以毫米为单位的一个什么最大时间对吧?啊,什么对,Before a batch will be written to the channel啊,然后注意这应该是有一个啊,对,这有有一个句号的啊,应该后边是大写了,对吧?这是两句话啊,这个相当于什么,就是一批数据被写到China的一个最大的等待时间。
06:00
啊,这然后边这句话比较关键啊,The batch will be written啊,就是这这一批数据肯定会被写,写到哪儿,写到China对吧,写上了whenever the first of size and time will be reached啥意思啊,其实这俩参数应该是配合使用的啊,就是说对什么意思呢?就是假如说我这一批数据啊,我不到1000个,但是呢,我到这个时间了,那我是不是也要写的拆呢?对不对,那假假如说我这个时间没到1000,但是我这一批数据到这么大了,我是不是也要写到China啊,是这个意思啊,就是满足他俩其中任意一个数据就会被写入到China当中啊,这样的一个作用,其实像这种批次和时间配合使用的这种这种这种这个场景在卡夫卡当中还是比较常见的啊好了,那咱们知道这两参数的作用就行了,看一下我们这配多少比较合适啊,那BA size我们配上了这个5000啊,那这个BA咱们设成了2000啊2000好,那接下来咱们往下走。再往下这个参数就是啊,Boottrap service,这个应该是比较呃容易吧,咱们不用多说了,其实这里边咱是不是写俩就行了啊,然后下边这还有一个卡卡点topics啊,那这个我们写成topic log啊这个诶你写到哪个里边了,咱是不是得消费哪一个呀?啊这个很简单,那接来下一个,下一个是关于咱们这个拦截器,拦截器虽然没写,但是咱们已经知道它有什么功能了,就是给已问的当中加一个时间窗啊,对吧?啊好,那这是关于咱们这个source啊,关于S,那接下来呢,我们去再接着搞一下啊,那么接下来搞什么,接下来呢,我们去搞一下这个pan。
07:29
啊,Channel之前咱们channel用的都是member channel对吧?啊,那现在我们用一下这个fair channel啊,File channel大家先看一看file channel当中的一个参数能不能看懂啊,首先这有一个什么type啊,有一个那个fair类型,嗯,这个能看懂这一个什么checkpoint DR,这有什么date DR啊,什么max size capacity,什么keep alive。这几个参数好像也就是太能看懂吧。对不对,好像也是他能看懂啊,这是为什么?因为咱们大家对这个fair China啊,对它这个底层的这个结构可能不熟悉啊,那所以说这些参数你都不不懂很正常啊,完成长那说咱们现在先怎么做,先把fair channel啊,它这个底层的这个结构先给大家先介绍一下啊,然后这些参数咱们就能看懂看明白了啊好,那这个结构是什么样的呢?啊,我把这个关了啊嗯。
08:18
它结构什么样的,是这样的啊。哎,大家认真听啊,啊,首先大家都知道fail China呢,我的已问的数据是存储到这个文件当中的,对不对啊,那所以说呃,在fail当中,Fail China当中呢,我肯定得有一个文件啊,一个文件的路径,这里边呢,专门用来存储咱们的event啊,那我这边诶source我正常会怎么做呢?Source我会正常不断的往咱们的这个文件里写啊,一个一个一批,肯定也是一批一批的写,对吧?啊一批批写,然后我右边呢,那我右边呢,有一个这样的,呃,什么东西啊,有一个这样的呃,Think啊会不断的从这里边去取啊,不断的这边去取。啊哎,这个很正常啊,这很正常,那现在呢,呃,我们其实这个大家能能想到是这样的一个结构啊,但是它其实底层的结构没有这么简单啊,它是没有这么简单的,那它还有一个什么东西呢?实际上在费条件当中啊,我还其实还有一个内存队列。
09:14
啊,还有一个内存队列啊,就是file channel的,不只是有一个文件啊,啊,它也有一个像memory channel那样的内存队列啊,只不过这个内存队列和memory channel啊,啊,它那个内存队列当中存的数据是不一样的啊,Memory channel内存队列当中存的就是啥。就是数据对吧,就是一个一个的问啊,但是在fail当中,这个内存队列当中存储的不是疑问,它存的是什么呢。疑问的在哪?疑问的在文件里边对吧,那文件这个内存队列里边存的就是啥存的相当于是咱们下边这个文件当中这个event的一个,你可以把它叫做当做一个索引啊,也可以把它理解成一个指针啊,就是它相当于是存在一个索引吧啊一个索引,然后每个索引会指向一个event啊,每个索引指向一个event。
10:04
啊是这样,其实这个东西是不是就相当于是咱们那个memory channel啊,只不过就是这里边儿没有存真正的数据,数据在文件里啊,然后这个队列里边只存咱们那个索引啊,只存索引,那这个实际上才是咱们这个file channel,它底层的这个真正的一个这个逻辑啊,是这样的。啊,然后大家想一想啊,我们这个fair channel,咱们号称什么,号称我这个数据不会丢失对吧?啊,就是我挂掉之后我再重新启动起来啊,那我这个数据是不会丢啊,那大家看一看它现在这个结构是不是真能实现这样的效果呢?来试一下啊,比如说我现在数据一直不断的往疑问的写,对吧?啊,那实际上这个数据往这里写,那我这个内存队列当中是不是也要写进相应的这个对应的索引啊,对不对,OK,那接下来咱们啊思想一个这样的问题啊,假如辅录现在挂掉了啊,挂掉之后呢,我再重新启动起来,那我们这个数据有没有丢。诶没丢,哎,确实数据没丢,哎,但是咱们现在有一个问题啊,什么问题。
11:02
我恢复起来之后,你说我这个think。应该从哪儿开始接着消费是比较合适的?或者从哪开始配个是比较合适的?诶,好像是没有吧,不知道从哪开始了吧,对不对,因为我这个相当于是内存队列东西肯定是没有了啊,这肯定没了啊,然后文件虽然有,但是我也不知道我开上次从哪,上次到哪了啊,然后这个从从哪开始我也不知道,那所以这个好像虽然数据不能不丢,但是还是不好用。啊,那怎么样,我就能知道我从哪开始接着消费了呢?从哪接着take了呢?怎么样就能知道了。啊,假如啊,假如说咱们这个内存队列里边的数据,假如说也不丢。也不丢,那那我是不是就知道我我哪些现在在channel里啊,哪些呃没有被take呀,咱们就知道了啊,我直接把channel里接着take就行了,诶但是内存队列当中的东西它能不丢吗?肯定会丢的。
12:01
肯定会留的,那所以说人家底层他是怎么做的呢?OK,哎,他又来了一个文件。又来一个这个文件干什么呢?对内存队列进行定期的这个快照。啊,定义快照啊,也一会我会实时不断的把咱们这个内存队列当中这个索引数据,我给它写到一个文件里,而且这个是不断的写的啊,一直写,只要这个内存队列发生哎变化,那我就会对应的去更新咱们那个,诶那个快照啊将是一个文件,诶那这样一来的话,那这个就比较完美了,那你再试想一下啊,假如现在我的这个辅助挂掉了。啊,完了之后重新启动起来,这个首先它这个数据没丢,那再一个呢,这个内存队列虽然刚才没了,但是我现在是不是有快照啊,对不对,我可以再怎么办,再把这个快照恢复一下,哎,那这样一来我是不是相当于就恢复到了我们这个辅录挂掉之前的状态,对吧?那我现在该从哪开始消费,诶我就知道了。啊,是这样的,这是咱们这个file拆它底层的一个,这个结构相对来说是比较复杂的啊,这里边有一个内存队列,然后呢,有两个文件,一个是用来存数据的,一个是用来对咱们这个内存队列进行这个快照备份的,啊是这样的,这是它的结构啊,那这个介绍完之后呢,我们再回过头来看咱们这个file channel的这个配置文件,咱应该就能看懂了啊,首先呃,类型file这个不用说了,那下边这是不是有一个date DR啊data DR很显然就是存储数据的这个路径啊,存储数据路径,那这样一来的话,你看。
13:30
是不是指向一个路径,它其实就是谁呀,就是咱们那个真正的用来存储event的那个文件啊,然后咱上面呢,还有一个checkpoint的DR,这个checkpoint呢,就是干啥?就是咱们定期做快照的那个,诶那个那个那个文件啊,是这样的啊,那这个相当于是保存内存索引的这个,诶文件啊,行,这个应该就比较熟悉了,然后下边呢,还有一个这个什么max feel size,这个capacity啊,然后还有一个keep live啊,这些东西分别是什么呢?咱们逐一的解释啊,那先看这个max feel size。
14:02
Ma size指的是什么啊,指的是啊,它官网上的解解释啊,是a single file啊,这个这个size啊,就是一个单个的文件的最大值,这个指的是什么呀?其实是这样的,你往这个date Dis里边去写数据的时候啊,你不可能所有的数据都一直往一个文件里写,对吧?其实它也是会诶分开的啊,就是OK,我刚开始就有一个写到一定大小的时候,比如说到这么大了啊,就由他来决定了,到这么大那我就不再往这个文件里写了,怎么办?生成一个新文件,哎往这儿相当也是分段的啊,也分段的。是这样的,这是单个文件的大小啊,那下边还有一个容量,诶这个容量怎么去理解,Memorytime当中是不是有这个可拍这个概念呀,对不对?那maver当中那个容量是怎么理解的呀?是不是那个内存队列的大小啊,对不对,那我内存当中最多可以放这么多的event,那咱们这这个capacity怎么理解呢。
15:01
哎,其实是一样的啊,File插头是不是也有一个疑问,它也有一个memory,也有一个那个内存队列呀,对不对,那虽然内存队列里边我不存数据了,我存是不是也存索引呀,对不对,那我这个索引最多能存多少个呢?其实也是由它决定的啊,其实也是有一个容量的啊,还有一个容量跟memory拆当中,其实那个容量的概念是一样的,只不过memory当中存的是数据,咱们这儿存的是哎疑问的索引啊,啊,这是这几个参数。好,那下边呢,我们还有一个keep alive啊,这个keep alive呢,咱们一会儿再解释啊,一会儿再释啊,这个咱们最后再说,那现在呢,我们把上面的一个参数呢啊,还得再给大家再丰富一下啊,再丰富一下,咱们去哪儿丰富呢?去看官网。哎,CTRLF,咱们找到fileel走。走来,这是要拆。啊,非颤等啊好,那接下来我们来到这个位置了,大家看一下啊,那那这个参数是checkpoint的D,是用来做咱们那个那个快照的,对吧,那这个之前咱们已经解释过了啊,然后下边呢,好像还有一个跟它相关的参数啊,叫做什么叫做柚子啊,Do,这个checkpoints,我下边好像还有一个呢,相关的词儿叫做backup checkpoint DR。
16:16
这三个参数好像是一组对吧?啊,那这个是什么意思啊,大家解释一下,首先哎,Use到倒就是这个相当于是重复,哎这个冗余的意思啊,那这个层数默认是false,默认false的话,那也就是说我这个checkpoint的路径呢,只有一个。啊,那只有这一个路径,大家想想啊,我们这一个路径里边的这个文件呀,需要频繁的被修改是不是。是不需要频繁追求改,为啥,你想一想啊,是不是咱们那个,呃,相当于是我们那个内存队列里边的数据肯定会一直在变,对吧,因为有进有出有进一直变,那所以说这个文件是不是就得经经常频繁的被修改啊,诶修改这需要打开关闭,打开关闭啊,那这个因为太频繁了,所以说假如说我正在修改的过程当中,假如说诶我这个辅轮给挂掉了,那有可能导致这个文件呀,啊有可能会被损坏啊,有可能被损坏,那你要是被损坏了之后,那相当于你再启动,是不是咱们这个状态就恢复不了了呀,那所以说人家考虑到这个问题呢,怎么办?诶给我们提供了一个这个,诶backup checkpoint d。
17:18
啊,就相当于我是不是可以有两个路径啊,那这个损坏了,我是不是这个东西能顶上来啊,对不对,是这个意思啊,这个意思,那当然了,你要想用这个backup得怎么办?先把这个参数设成数啊,然后呢,再给这个东西是不是再指定另一个路径啊啊,再指定另一个路径啊,然后大家要注意啊,那这俩路径啊,如果说真要做这个备份的话,我们尽可能让他怎么办呢?尽可能位于哎不同的这个磁盘。因为咱们一个服务器上是不是有可能有多块磁盘呀,尽可能让它位于不同的磁盘啊,因为什么,因为一块磁盘损坏了,是不是另一块还是完好无损的,是这样尽可能啊放到两个磁盘当中啊,这是哎,关于这个参数,好,那现在再来说一下这个date Dis。
18:03
呃,这个大家细心东西应该注意到了,后边有一个S对吧,既然有S就说明我们这个存储event的这个数据啊,我们可以放到不同的路径里边啊,对不对,而且放到不同路径的时候呢,我们这儿还有一个好处啊,还有好处什么好处呢?来看一下诶,看后边的解释啊,你像后边这些呃,解释的内容其实都是很有价值的,就是可能有同学直接忽略掉了,他不看啊,这得看一下,你看啊,这个comma separated list of directories foror long log fields,这是干什么呀?就是以逗号分隔啊,然后呢,可以写多个路径啊,用来存储咱们那个哎数据疑问的数据啊,然后后边这句话比较关键啊。这个大家自己看能不能看懂。Using,哎,Multiple directories,用多个路径,然后呢,看后边比较说on separate separate separate,这个diss是什么意思啊,就是用不同磁盘上面的多个路径啊,Can improve啊,这个fair channel performance什么意思啊,啊,就是使用啊不同磁盘的这个多路径去存储咱们这个数据,能够提升file channel的这个性能。
19:13
呃,这个是为啥呀,因为写的时候我可以并行写呀,你往一块磁盘写,肯定没有同时往多块磁盘写写的快,对吧?啊,那所以说哎,这个时代需要注意的啊,就是咱们这儿也可以算作一个优化的点,就是反的一个优化的点啊,这个东西还是比较重要的啊,行,这是关于它。啊行,那完了之后呢,我们看,呃,下边最后一个参数啊,就是那个刚才咱们提到那个keep alive啊,Keep alive到底是什么意思呢?我们来看一下文档,来看一下官网找到keep alive在这。哎,这个keep alive呢,我们这其实给大家写的很明确,这是什么东西,Amount of time in second啊,就是以秒为单位,对吧?来,To wait for a put operation。什么意思,好像是什么意思,就是一个put操作需要等待的时间,对吧?啊keep alive啊这个从字面意思上来看,这个应该啥意思,Keep来保持存活对吧?啊保持存活,那么完事就说了一个什么等待破操作的这样一个时间,那这个才是到底是怎么去理解呢?啊,这个其实你要是不理解,咱们不了解咱们那个当中那个铺的事物,那这个参数你确实不好理解啊,那这也就是他是跟咱们那个铺的事物是相关的啊,那回忆一下那铺的事物是怎么样的一个流程来着。
20:30
还能不能想起来负的15?首先source,我这边不断的采集数据,对吧?那他会先把什么呀,数据写到咱们那个put例子当中啊,写到put list子当中啊,写写写,OK,那写完这一批之后,那会怎么办?那put事物是不是要提交啊,对不对,那提,所以提交的过程就干什么,就是把put list里边的数据给它放在哪,放到咱们那个channel当中啊对不对,需要往里放啊,需要往里放啊,当然咱们这不是member,咱们是什么呀?是file channel,那file channel我相当于就往哪放啊,数据写到那个文件里边,但是这个索引写到这个队列里边,这个咱这是不是也是有一个内存队列啊,啊一样的效果啊,那咱们就当麦channel讲啊,其实道理是一样的啊,行,那我说句要往咱们这个channel里边写。
21:16
啊,写,但是写之前我会干什么呀。写这样会干啥?写着我会检查呀,对不对?在写之前先检查China当中目前是否有足够的空间去容纳我这一批的数据啊,如果有那我就往里放,如果没有怎么办?哎,如果没有的话,正常会回滚对吧?那回滚的操作是什么呢?是清空put list它对不对?哎,会把这个例子先清空,那清空之后呢,我实际上我会抛一个异常啊,叫做这个channel exception啊抛异常,那抛完这个异常之后呢,那我前面这个source实际上会catch到这个异常source catch到你这个异常之后,他做的操作是什么呢?哎,重新拉取刚才那一批数据啊,如果我是泰有电RS的话,那我会重新,诶按照咱们是不是有记录这个位置啊,对吧,重新从刚才那个位置呢,继续采集数据啊,再把刚才数据再采集一下,完了之后呢,再放到咱们这个put的例子当中,然后呢,再尝试往这里边放,但是放之前是不是还要先检查一下有没有足够的空间呀,这是咱们这个回滚过程,但是呢,其实大家想一想啊,你说他去检查这个channel当中有没有空间的时候,假如说没有空间,那如果我就立马就回滚,那是不是感觉这个有点有点有点滞障的话,对不对,咱们说句难听的话。
22:36
啊,就是说有有点浪费性的。哎,怎么浪费性能呢啊,有点太着急了啊,你现在你查的时候是没有空间的,对不对,你等一会儿怎么了对不对,你等一会儿,等一会儿是不是有可能我后边那个SK就会有可能把channel里边的数据拿走一部分啊对不对,那你拿走之后这是不是就有空间了呀,对不对,那我等一会儿多好啊,没有必要立即回滚。
23:00
啊,那所以说咱们那个谁啊,咱们那个,呃,这个人开发人员,人家肯定也不傻对吧,啊,人也知道,那所以说我们这儿就设了一个这样的一个参数,什么参数呢,就是keep alive。啊,这个所谓的K,我觉得大家现在就能理解了,为什么叫保持存活,保持谁的生活。保持咱们这个铺的事物的存货,相当于是啊,对不对啊,那我现在等一会儿,等一会儿我再放,可能这个事物就能够正常的提交啊,我就没有必要回滚了啊,实际上就是这个作用啊,那也就是说这个就相当于是如果说满了,然后我等多长时间再尝试往里边放,而不是立即回滚啊,就这意思啊,那这就是咱们这个参数吧。那这个就是啊,相当于是keep alive啊keep alive,那这个参数咱们调的时候可以有一个什么样的思路呢?大家想想。应该有一个什么样的思路?啊,同样的思路,如果说我调小了的话,那我这个破的事物会频繁的回滚,对吧?啊,如果调大了的话呢。
24:00
诶调大了话,相对来说要好一些对吧?啊,相对要好一些,就不会那么频繁的哎,回滚了啊,不会那么频繁的回滚了啊,但是可能这个延迟可能要要高一些啊,也高一些啊,那所以这边呢,咱们呃就默认是三,默认是三秒,这个当然是秒啊,三秒钟的时间,其实三秒钟时间呢,其实也也不短了啊,其实也正常,那所以咱们这呃最终文档调成多少,调成了六秒对吧?啊,那其其实基本上咱们呃三秒也行,六秒也可以啊,就是这样的啊好,默认值是三秒啊。咱们这写的吧,啊,Cable alive,哎,默认三,然后呢,In second默认值三秒,咱们这调成了六秒啊啊好,这是这个参数,咱们知道它是干啥的就行了。啊,那接下来咱们再往下走,再往下其实就是咱们这个thinkk了,对吧?啊,那think就是at thinkk这个大家之前肯定用过啊,没用过啊,但是有些东西大家可能之前没有接触过,那接下来我马上给大家说一下啊好,我们先说诶前面这几个参数吧。
25:00
Think的类型HTS不用多说了啊,然后咱们看下一个,下一个就是这个pass pass就是路径,这个路径呢,咱们前面分析了,我们要写一个相当是一个动态的路径,对吧?啊,那动态路径肯定需要用到咱们那个时间的转移序列啊,这个YMD,这就是所谓的转移序列啊,它会最终转成一个具体的年月日啊,来看一下咱们的路径是什么,是or date,然后呢积more啊,然后后边呢是log topic log,然后后边的百2Y-2%M杠百分号B。就是年月日啊,实际上是这样的一个途径啊。好,那接下来给大家问大家一个问题啊,你说我们这个路径,咱们前边也没有任何的标识,对不对啊,也没有说你是要往HDF上放,还是要往这个本地文件写,就写了一个这样的路径,诶那你说他怎么是,他怎么能够就是识别到我们那个HTFS呢。他怎么知道是要往HDF上写呢,而且他怎么知道咱们HDFS,我那个name no的地址呢?其实正常情况下,你要写一个HD路径,写完整应该怎么写呀。
26:07
应该是前面先写协议hfs,然后双斜线,然后呢,这个海度啊,102冒号多少,8020是不是正常一个完整的路径,应该这么写才对啊,就是咱们这个前缀,但是没有写,哎,那你说辅路它是怎么识别的呀?想想怎么识别?因为F啊,在它启动的时候认真听,在它启动的时候它会加点什么呀,他不是会根据咱们那个海豆op home啊,去找到我们海杜op的所有的依赖,包括炸包,包括配置文件,哎,人家弗鲁姆自己会从配置文件当中读取咱们这些相关的信息的啊,那所以说咱不是配了海豆home了,所以他就能找到。啊,那我之所以这么说,那言外之意是什么呢?如果说你不配海杜home,那是这个你是不是得写上啊对不对?那再一个呢,假如说啊,我们现在这个呃,Lo是不是部署在了和我们这个海杜吧相同的一个集群里边啊,那那假如说你的flo是一个单独的节点呢?哎,这是我腐部署一个单独节点,后边呢,是我的海度北极群啊,那也就是说你的这个flu节点上根本就没有去配置什么海度home也没有装海度对不对,那你这个东西还能这么写吗?
27:23
那肯定就不能了,这个你就得怎么写,就得补全了啊,就得补全了啊,是这样的,这是大家需要去注意的点啊,需要注意的点啊行,那咱们这因为是在相同的集群上,所以这呢,你直接写是没有问题的啊好,那再往下走,下边这个文件相对来说就比较容易了吧,这叫什么HTS,什么file prex,这就相当于什么我把数据写到hfs上之后,那那个文件名的前缀是什么对吧?啊这个不用多说了啊,那再往下看,下面呢,咱这有个这样的前缀叫做H啊,叫做A1.s啊,什么HDFS点。Round,诶这个round是什么意思。
28:02
Run。啊,这个run,这个run是什么参数,咱们去HM看一下啊,咱们找到HDFSDFS啊,然后think走走走来往下翻。找到那个什么round,诶诶在哪呢?大家帮我看一眼啊,我这个眼神不太好,找不着,诶诶找到了在哪呢?啊诶咱们round首先这是一个布尔类型的,是true和false对吧?那好像下边还有几个跟它相关的这个参数对吧?一个什么round value,一个round unit,诶那这几个参数干什么用的呀?什么意思啊?啊,这好的随机生成时间串,好像不是啊,好像不是,这是干什么用的,给大家解释一下啊,我这就先给大家提一个场景啊,咱们现在我们的数据是是不是相当于是按天去进行这个划分的呀,哎,我一天算一次,但其实有些大公司啊,有些大公司我的数据量非常大啊,我这一天数据量非常非常大啊,那我如果说这个呃,统一一天的数据进行,呃一一天一算的话呢,我这个数据量太大了,我算不完,那怎么办呢?他可能会哎分开算,我可能啊会一个小时算一次。
29:12
啊,也可能怎么或者是哎,五个小时算一次。嗯,或者假如说一个公司,假如说有一个这个,呃,我们公司的数据量很少很少很少,我可能哎,我怎么办啊,诶,我比如说我两天算一次啊,当然这种场景相对来说比较少啊,啊就是即即便是数量少,我一般也是一天一次啊,一天一次啊,就是数据量多吧,数量多我可能一个小时算一次啊,但也有可能怎么,比如说五个小时算一次,或者三个小时一次,哎等等等等。对不对,那这样的话,那你说我们这个路径应该怎么写呢。啊怎么写,比如说我现在就想五个小时一次啊,比如比如说五个小时,那五个小时一次,那怎么写。五个小时不会,那先说一个小时吧,那一个小时怎么办?是加一个百分号H是不是就行了,就这是一个小时的数据放在一个路径,那我一个小时统一进行计算对吧?啊,那五个小时怎么写?
30:03
五个小时还这么写行吗?哎,那肯定是不行的,你这么写就是一个小时一次了,那要写五个小时,你就得这么写了啊,你就需要先把这个东西设成哎初,然后下边呢,你需要写一个A1.2,哎,然后think.k一点HDFSHDFS.lu ED run va flue等于几等于五啊然后后边呢,还有一个哎,改一下C啊C啊CV后边写什么呀?Unit unit是啥意思?单位的意思啊,单位意思,那这写那个啥呀,H ho hour啊,其实它就是实现这个功能的啊,也就是说假如说你需要这个几呃,这个不是不是单个的小时,不是或者不是单个的天啊这样去哎去去组织你这个路径的话啊,那你这时候需要把它设成处,然后呢,呃,五个小时一个路径,那就是五小时啊,那两个小时一个路径就是二小时啊这么去使用啊,那咱们这是不是就一天一个路径啊,一天路径咱需要把这个东西设成数嘛,哎,不需要,那就直接就是file生成false就可以了啊是干这个用的啊好,那现在继续往下走,那下边我们这呢,还有这样的几个参数。
31:16
这几个参数也很重要,虽然很简单啊,但是这几个参数你要整不好的话,那你H会生成大量的小文件啊,这是什么?来看一下,首先这有一个肉啊,肉肉是什么意思,肉滚动的意思对吧?但是其实所谓的滚动咱们通常指的就是啥呀。就是生成新文件对吧,所谓的滚动,每滚动一次,相当于是诶,这个文件关闭,再生成一个新文件啊,再滚动一次,这个文件关闭,再生成一个新文件,这就是所谓的滚动啊,所谓滚动啊,那这个滚动这实际上相当于配的是什么呢?这上配的呀,是我们生成这个新文件的策略啊策略,那都有什么策略呢?第一个按照。Inter inter是什么意思?就是时间段啊,时间段也就是按照哎时间去滚动咱们这个文件,那第二一个呢是row size size肯定是文件的大小了,对吧,还有一个roll count count指的是什么?
32:11
数量,那整个数量。是event的数量啊,就是flu是不是一条数据分成一个event呀,按照event的数量去滚动生成文件,那这几个参数到底什么意思啊,比如说肉引它咱们设成十单位是秒啊,也就是说我十秒钟会生成一个新文件,因为flu咱们是不是一个流啊,会源源不断的往HTM上写数据,对吧?啊,但是你写的话也不能让他一直往一个文件里写啊,不能让他一直往一个文件里写。啊,那这边正常怎么写哎,我比如说十秒钟一个文件啊,十秒钟一个文件,达到十秒生成一个文件,达到十秒生成一个文件啊,是这样的啊,那下边还有一个roll size size这指的是啥呀。啊,就是比如说这个大小,哎是128兆啊,这是128兆啊,这个是相当于咱们一个文件块的大小,对吧?那OK,我这会怎么办呢?哎,128兆一个文件,128兆一个文件,当然他俩还是什么原则,原则呀,就是先满足谁,是不是就按照谁进行这个处理就行了呀,对不对,先到十秒,那就哎生成新文件,先到128兆,那就也生成一个新文件啊是这样,下边呢,还有一个roll count roll count指的是多少个event生成一个文件,那通常这个我们是不使用的,因为这个呃其实不太好用,那所以说我们就可以怎么关闭它呢,设成零就行了,设成零,那这个诶就不生效了,相当于啊不生效了啊是这样的啊好,那一般情况下呢,我们这个位置设程多大呢?就是128兆就行。
33:38
啊,一般这个就128兆,那这个时间咱们怎么去设置呢。啊,这个时间咱们一般怎么设置啊。怎么设置啊?那得看你这个数据的那个那个生产速度了吧,对不对,那假如说我数据呢,大致是比如说哎这个哎十兆每秒啊,大致十兆每秒啊,大致是十兆每秒啊,那十兆每秒的话,那你说我这个时间射程多少比较合适?
34:08
哎,那比如说就是128啊,是不是除以一个十啊对不对,那差差差多少,差不多12秒对吧,12秒,那我基本上这个呢,就可以设成12秒啊,然后一般情况下这个时间要怎么样啊,要略大于咱们这个值啊,啊要略大于这个值啊,你要是比这个值小,那是不是永远几乎都永远都达到达不到这个128兆啊,啊是这样的,略大于咱们这个值就行了,略大于这个啊因为咱们是什么样,因为咱们尽可能啊让我们HDFM那个数据呢得怎么样,这个文件大小是不是应该均衡一些呀?啊128兆,128兆啊,那这有有什么好处啊。方便我们后期进行什么东西啊,Map,假如说要读这个文件,方便我怎么样,是不是一个文件一个map,这样是比较均匀的呀,啊是这样的啊啊这应该能想清楚才对,行,那接咱们继续再往下呢,是关于咱们这个文件的压缩相关的知识点,这个文件压缩很重要的啊,很重要的我们现在数据啊,是不是通过flu往HT上传啊啊,那传的过程当中,我们就要对数据进行一个压缩啊,就要对数进行一个压缩啊,那咱们压缩的话,我们采用的是哪种压缩格式呢?
35:18
就是拉泽罗,注意是拉泽罗P啊,来,咱们看一看官网上对这个压缩相关的几个参数。来跟压缩相关的,它你找一下,呃,这还不太好找,我又找不着了,来看一下啊,哎,在这呢,来在这呢找着了。啊,就这俩三个。来先看下面这个,下面这是fair type,对吧?Fair type就是文件的类型,那文件类型目前支持哪几种呢?第一个second file2文件,第二一个呢是诶data stream,下一个呢是compressed stream啊,这个二进制文件data stream呢,就是不做任何处理啊,就是保持原来的文本文件,那这个compress呢,就得进行压缩啊,那咱们现在要压缩是不是肯定选这个啊,所以不type需要设成compress stream啊,然后再一个呢,我们的压缩格式是什么?就得配谁了,就得配这个了,哎,Express depress,然后呢,咱们目前支持的压缩格式是什么GZ吧。
36:14
B z to,诶拉泽罗拉泽罗P,你看这是不是两种压缩格式啊,对吧,咱得搞清楚啊,后边还有一个耐比,那我们现在要想用切片的话,那应该用啥呀?是不是用拉罗P呀,拉P,那这用LAP啊,那最后一步呢,就是拼接咱们的China和诶这个S以及China和S这个就不多说了啊,那行,咱们花这么长时间把这个文件就介绍完了。啊,其实大家现在跟我思考一个问题啊,我们现在这几个参数是不是大致能保证我们数据写到HDFS之后啊,是什么样的效果呀,差不多是100多兆一个文件对吧?啊,100多兆一个文件啊,诶那你说我们在选择压缩格式的时候,还有必要去考虑这个切片不切片吗?
37:01
好像不用考虑了,对吧,对吧,因为咱们这儿本身相当于什么,我文件就已经被切开了,对吧,对不在正好我去后边读的时候,我是不是一个文件一个map,一个文件一个map呀,对不对,所以说其实你知道不用这个拉斯罗PE也行,用谁用snappe是不是更快一些呀,哎,咱们用s snappe也行,其实啊当当然你用哪种方式,你得基于你这个文件的这个格式,咱们这因为是将文件给它切开了,所以说你就诶不考虑切面,其实也行啊,这是关于这个位置,大家得多思考一下啊行,那这个配置文件咱们终于说完了啊,我把视频录一下。
我来说两句