00:00
好,刚才呢,我们是自动提交的。Off赛对吧,啊,自动提交赛了,那如果说我把这个自动提交这块。这样我也不改他,我看地我这个地方改了什么。这个呢,给它注射掉,那其实延迟这个东西配不配置无所谓了吧,因为你既然是false了,这个东西配了也不会生效对吧?啊,它只有处的时候才会生效,好它是for来,它会发生什么事呢。我现在开启一下。这个时候由于我们所讲的之前是不是已经消费到最大的位置来,对吧,没有数据很正常吧,你多等一会儿是不是没有数据对吧,他写回去的数据是不是还是最大的那个赛道没问题吧,好。来,我把它关了,关了之后呢,我打开生产者来生产十条数据。
01:08
生产的十条没问题吧,接下来我打开它肯定会出现十条,这个没问题的啊,因为跟之前一样。十条数据是不是打印出来了,这个没问题,好,问题是我再打开。我再打开会什么样。这个能理解吧,因为你关闭了自动提交,同时呢,你没有手动去提交吧,你也没有提交,也就是说我消费到100了,我之前是我在里面保存的是不是90这个数字,假如说保留的90这个数字,接下来你有新的数据,是不是91~100啊好,我一启动是不是给您消费出来了,是入已经消费到100了,但是我已经什么。没有提交没有更新吧,没有更新是不是里面还是保留了90,那我重新启动的时候,是不是还是从九十一开始交费呀,对吧?啊这个也就是说,而且你要知道一下这个offset这个内容呢,是我们所讲的它在第一次启动的时候,那怎么证明第一次启动的时候呢,来点开。
02:14
没有提交吧。没有提交好,那这个时候。有没有经过第二次拉取呢?就是说等了这么长时间,这是第一次拉取,就拉取到这个数据吧,这个这么长时间有没有经过第二次拉取呢。有没有?那这。有没有经过第二次拉取啊,一定是有的呀,你不是不要处吗,一直在拉取啊,那这个想说明什么问题呢?你看啊。他这个地方也就是说等待了这么久,这底下这么长时间,是不是一定经过了至少一次拉取了吧,对吧,一次拉取了,他有说从91那个地方开始消费吗。
03:04
没有,这个就是我们之前跟大家聊的,他呢把奥赛存出去,不是说我每一次每一次拉取的时候都要访问那个奥赛的,因为这样的太慢了,你存出去了对吧,它的内存当中维护了一个什么100,假如说你第一次不是90吗?这个90是假如说啊在本地下划线,下划线consumer什么。在里边存着,这没问题啊,我一启动,我是不是先把90拿过来,从90开始消费到100了,第一次。好,接下来他100是不是下一次从100开始消费啊,但是他并没有把100开什么写回去,只是没有多这个操作,但是内存里边奥的已经是什么100了,只要我当前这个进程没挂,我不会去访问这个地方了。能听懂,因为没必要啊,你设计的框架的时候会这样设计吗?你设计一个东西,说我只要保存出去,我每一次都去读取,这个太慢了吧,我这个地方因为我能写出去,我只要在内存当中保存一个,这个是不是就可以了,我接下来要接着消费的话,我是不是从内存当中获取这个off。
04:10
对吧,内存当中啊,那接下来内存当中是不是把100到一百一给它获取出来了,但是一百一又没有写回去吧,啊又没有写回去,哎,当我们给他停掉再重新开启的时候,它又从90开始消费对不对。你找一下这么慢吗?哎,有了吧,有点慢,是不是20条啊,又从90万,也就是说它保存在外面那个只是在你当前那个消费者启动的时候去访问一次,能不能证明这个问题。如果说他每一次拉取都去访问保存在外部文件系统当中的那个,是不是每一次拉取的都会打印这十二十项数据。能不能说明这个问题没问题吧?感觉还是有点晕,晕吗?应该没问题吧,捋捋啊,这个思路捋一捋对吧?那这个地方我们前提条件是这样,就问大家的是就在这一块空白时间,假如说过了十秒钟,那你告诉我这十秒钟他有没有去拉取数据,有去拉数据吧,好,那拉取数据没有打印,是不是他应该拿着最大的那个值去拉取的,但是这个最大值按照我们之前所讲的,并没有写回到那个地方,所以这个值是从这拿的吗?一定不是,如果说从这拿的,那一定又是20条数据。
05:35
对吧,一直在打印,不停的刷啊,那就在内存当中,所以说侧面证明了它这个地方保存的数据,无论保存在ZK也好,保存在本地下划线,下划线cons里面也好,只是在你这个当前消费者启动的时候,他去干什么?访问一次没问题吧?
我来说两句