00:01
好,同学们,我们来开始下午的内容啊呃,上午我们下课前我们完成了这个精确一次消费嗯的一部分,对吧,就现在还没有把它做完啊,我们现在只是做到了呃,后置提交偏移量。对吧,那我们再来简单回顾一下啊,怎么去做到这个事情,呃,其实还是挺复杂的啊,呃,因为你想这个做这个就是后置提交偏移量。那你就得保证。提交偏移量的,这个是要你手动去控制的。对吧,那我们手动控制的话呢,诶就得什么呀,把这个opposite提交呢,改成这个手动的。但是呢,现在有一个限制是我们并不是自己。呃,作为这个消费者呢,去消费这个数据,对吧,而是卡不卡,而是这个Spark streaming呢,帮我们去做了这个事。所以说我们就不好自己去控制啊,就是比如说通过这个消费者对象,然后就调那个什么卡的方法,然后去提交。对吧,但人家这个,呃,Spark呢,也帮我们提供了一种方案。
01:02
只不过这种方案呢,呃,我们目前的话也不能用。啊,它有一定的限制啊,就是你不对这个数据做任何改动的情况下,那你可以这么去做,但其实我们是必须要对数据做改动的。要不我就没办法去处理我的数据。对吧,所以说呢,这个方案我们也用不了了。啊,那最终我们采用的方案就是,呃,我们需要自己去管理,自己去维护这个offet,就不能再借助于这个卡卡去做了,对吧,不能借助于这个Spark streaming,然后去做了。好,那我们怎么做的呢?我们是单独把这个off提取出来,然后呢,做了一个维护,我们是把它维护到了这个red中。对吧,好,那我们整体流程是什么样子的呢?就是呃,我们每次在这个从卡夫卡去消费数据的时候。啊,每次呃,从卡不卡消费数据的时候。我们需要干嘛呀?呃,我的直播好像有点歪,没有对齐。
02:06
我看看啊,现在呢。呃,现在对齐了吗?现在好了是吧,啊,刚刚没注意哈,可能不小心拖动了一下啊,来,那我们说回来啊。呃,就是我每次从这个卡不卡去消费数据的时候,那我需要什么带上一个这个off去做消费,那这个off的话,就是我们提前维护到这个red中的,对吧,什么时候维护进去的呢?就是当你这个每一次把数据写完以后,写出去以后,我们最后呢,把这个offset给他,诶维护到这个ready中。好,那我们这个维护了,这个从哪得到的呢?我们是从你当前消费到的这个数据里面。对吧,就从你这个当前消费的数据里面,然后把它提取出来的。OK吧,就是这个整个的这个呃过程啊,你得知道我们是怎么去做的。好,那基于这种方案的话呢,我们就呃提供了这样的代码。
03:01
来再来看一下,我们写了一个就是opposite管理的一个方案啊,我们可以去往你的red去存这个opposite,然后呢,也可以从你这个red去读opposite。对吧,好,那有了这个功能以后呢,我们在我们这个主程序中。啊,我们就可以来看一下,我们在每一次从你的卡夫卡中去消费数据的时候呢,我其实先去读一个offset。读到offset以后呢,我通过offset再去从你的卡不卡的消费数据。当然我们需要做一个判断啊,就看一下你到底是有值还是没值,如果说你没有值,那我就按照卡不卡的这个默认upet去做消费,如果说你有值的话,那我就按照我的去做消费。对吧,然后你消费出来数据以后呢,你要立马去把这个给它提取出来。能听到吧,就是不做转换的前提之下,把它提取出来,然后踢出来以后呢,你把这个offet赚到手里面,那接下来你就该做什么操作,你就做什么操作。好,等我们把数据完全的处理完成以后呢,我们找一个合适的位置。
04:03
然后呢,把offset做一个提交,当然这个位置的话呢,也是比较刁钻的啊,这个你一定要想清楚在什么地方去写啊,我们分析过有什么for,有什么for r DD里面,还有什么for RD的外面。对吧,最后呢,我们选择的是这个for r DD里面,然后呢,For的外面,因为它是在这个Java端执行的,并且呢,它是一个批次呢,执行一次,它是周期性的。那我们正好就是希望,诶,我每消费一批次的数据,那我就提交一次,每消费一批次数据,我提交一次,这个正好就是一个周期性的提交。对吧,所以说我们就可以什么使用诶这个位置来进行这个提交了。好吧,这是我们,呃,上午呢去做的这个事情啊,OK,呃,那至于我们最终想做到的这个精确一次消费啊,现在还做不到。啊,因为我们还有一个密等性的这个处理没有去做理解吧,就现在我们写了一上午,其实主要主要就是保证了这个数据不丢失了,啊,其实现在它里面还会有一个问题,就是数据呢,可能会重复。
05:03
能听到吧,数据会重复这个问题啊是那这个重复问题的话呢,呃,我们目前就不用再去管了,因为啥呢?因为我们现在处理完的数据呢,是写到了卡不卡。对吧,处理完数据写到卡不卡。那么我们其实现在的话呢,并不会在你的卡夫卡中呢,去做数据的一个什么统计,就说白了啊,还是来看这个流程。我们把数据做了分流以后,然后呢,分流到了这个卡夫卡中。那我们现在明显知道的就是这里面可能会写进去重复数据,但是问题不大,因为我们不会在这个层面的做这个数据的统计,就是最后的这个统计,我们不会在这个层面去做,所以说呢,你有重复数据你就有吧。对吧,然后呢,等你这个数据再接着往后去处理的时候,诶,那我就要去考虑这个幂等性了。就比如说你里面有这个重复的数据。是吧,那我要想把这个数据呢,做这个去重操作啊,或者说呢,我在这个最终写入到我这个,呃,就是o lap的时候呢,诶我看看能不能把那个重复的数据呢,给它什么去个重。啊,那么其实也是可以的啊,我们的这个ES呢,它是支持这个密登写的,到时候你这个相同的两条数据,你这个写到ES的时候呢,它就什么只会给你存储一条,那么这样我们就可以,诶前面呢保证数据不丢失,后面呢保证这个数据呢,可以什么做一个去同操作,那前后加起来我们就整体做到了,诶精确一次。
06:20
好吧,所以说呢,这个。密性的操作,我们就先先再等等了啊,现在我们就先不做这个处理了。明白了吧,同学们啊,这是我们,呃一上午啊,我们所做的这个事情啊,我们再来把它这个简单去,呃,这个总结一下啊好吧。呃,那这个完事以后呢,其实我们这里面还会有一个问题啊,嗯,这个问题我们单独来说啊。
我来说两句