00:00
好,接下来呢,我们来看一下数据的乱序,那么数据的乱序啊,无论是面试还是开发都是绝对的重点,那下面我们来看一下。打开首先映入我们眼帘的呢,是生产者和对应的卡瓦集群,那么在生产端呢,它会对每一个博客节点最多缓存五个请求,假如说这边呢,有两个博克节点,那好,那这边我就可以缓存两个这么一个队列,每个队列里面最多放五个请求,那这五个请求呢,是没有应答的,请求什么含义,给大家详细解释一下。把它拿过来。比如这样。你这边把这个数据啊发送到卡帕奇群,那么如果第一个请求发送过去之后,对方没有应答,你允不允许发送第二波数据呢?哎,这里面呢是允许的,你可以发第二波,那我能不能发第三波,第四波,第五波,第六波呢?那记住,那这里面最多能够发送五波数据,对方没有任何回应啊,这是可以的,那再多比如说到第六个的时候,那就不行了啊,是表示这个含义哈,那这里面怕什么事呢?就怕呀,比如说第一波数据发过去了,第二波也正常发过去了,但是第三波数据不好意思。
01:11
没成功,那没成功的话,他是不是要重试啊,那重试的话,那它的下一位,比如说第四位数据,诶发送过来成功了,那成功过来之后,那就会导致124是吧,那三跑后面去了,那是不是就导致了数据的一个乱序啊。哎,市场工程,那下面呢,我们就来解决一下数据的乱序的问题。那第一个。说卡普卡在1.s版本之前,保证数据在单分区内有序,那怎么做到呢?哎,只能把这个参数值啊设置为一,也就说这个缓存队列里面最多只能放一个请求,你看这个请求直到你发送完之后,那我才允许发送第二个,那这样就不会出现乱序的这种情况啊好,这是1.s。那么下边呢,在1.x以后,如果说你没有开启幂等性,那你仍然只能把这个参数还是设置为一,比如说发送过去之后,哎,直到它应答之后,你再发第二个,那好。
02:11
那有什么区别呢?哎,如果说你开启了幂等性,那就不一样了,开启幂等性之后,那这个参数的值,它就允许你设置只要小于五就可以,就是最多给你缓存五个对应的请求。那它底层是怎么做到的让数据不乱续呢?哎,是这样啊,原因是。因为啊卡不卡1.s以后启动了密等性,那么卡卡服务端会缓存这个生产者发送过来的最近的五个请求的元数据。那无论如何都可以保证最近的五个数据是有序的,是这样。你看啊,你发送过来数据。我这边呢,给你缓存了五个请求的原数据,如果说第一个请求过来,哎,我这边正常收到,第二个请求过来,我是不是也能正常收到啊,啊,只要这边收到我就可以落盘了,为啥可以落盘呢?还记得幂等性的条件吗?第一个条件是PID。
03:07
第二呢是分区,第三个是不是序列号啊。序列号,这个序列号呢,它是单调递增的,比如说第一个是一,第二个是二,第三个就得是三,那好,那他一看说第一个发送过来的数据是一,第二个是二,那是不是单调递增没问题啊好,但是呢,你看发生这的时候,这个三出现了问题,过来之后,下一波应该是三,但是实际呢,他收到四,那这个时候不好意思,你这个数据就得在内存里面放着,不能进行落盘,哎,他继续收下一个请求说五,那五呢也收到之后还没有三,那继续直到等到三来了以后。那三来了以后,他一看啊,12345收齐了,收齐之后他要对这个数据啊,进行一个重新的排序。排序之后再把数据落盘,比如说这波数据呢,再按照这个顺序落盘啊,记住啊,一二呢,他可以先落盘,但是呢,这波数据只要他发现序号不是单调递增,那么他就缓存着,直到这个来了之后,哎,一看啊,这五个到齐了,一排序啊,一照看啊就OK了哈。
04:11
啊,那这个呢,就是解决乱序的一个问题,那好稍微总结一下,在这个卡不卡1.x之前,需保证数据单分区内不乱序,那只能设置这个值为一。那1.s以后啊,如果说没有开启幂等性,想保证数据不乱续,那这个值呢,仍然是设置一好,那你也可以选择开启幂等性啊,这个值呢,可以小于等于五,仍然能够保证数据的不乱序,那如果说你是这个六,那就不一定了,因为这边呢,最多只给你缓存五个生产者发生过来的原数据,行,那这里呢,就是乱序的问题哈。
我来说两句