00:00
那圆码啊,这里面这是3.0.0啊SS对吧,那怎么看呢,从哪下手是这样吧,哎从哪下手,那正常情况呢,我们可以来到这个一个脏丝,一个脏丝里面,哎,这里面是不是一个main线程,然后这里面有一个卡不卡一个脏斯,有一个consumer,还有对应的一个producer,哎,其实这里面呢,就是你看哈这代码啊。他就是帮我们创建了一个,哎,可不生产者,生产者这里面有一个,你看这些属性配置信息对吧,Key和VALUE6的序列化啊,事物的这个啊,这个事物的超值时间,呃,以及事物的ID啊等等这些,然后下面就是你有一个卡巴producer啊,把这个属性配置信析往里一放,那下面呢,这个run线程呢,呃,Run的话呢,就是用这个producer进行一个发送数据,那发送数据的时候有异步发送,有对应的啊同步发送。那这个好像跟我们之前写的客户端是不是有点类似啊,哎,其实是一样的哈,比如说打开打开我们之前写的,这是我们之前写的这个卡板自定义的生产者也是上面这块呢,是对应的这个,诶创建producer属性配置信息之后呢,创建了一个KA发producer,把这些属性配置往里面一放,诶就来它,来它之后调用这个核心方法散的方法来发送数据。
01:14
都是一样的啊,一模一样的啊呃,那这里面你有两种方法啊,一种方法呢,是说我按照我自己写代码这个去看这源码怎么看,这是没线程往下走,属性配置机掉这诶你这边创建了一个卡a producer吗?然后点进去,然后DA再点,再点看一看他创建这个卡a producer的时候干了哪些事,然后你往这里面看啊,这里面有什么这个获取SID,获取客户端ID啊,以及呢,下面有什么这个看看啊。这是GMS其实是监控卡法集群的,然后这你看key的序列化和Y轴的序列化。那如果你想在这个源码里面进行一个注释的话,看行不行啊,比如说大这里。你看说完这个file啊,Is read only,比如说如果是你自己的这个写的客户端,那这里面你是要关联对应的源码了,关联上之后,那这个源码是只读模式,那如果你想对这个源码进行一个阅读并注释的话,那怎么办?那你只能用它系统给你提供的。
02:11
打开这个对吧,这是他系统提供的,哎,这里面是不是也给你提供了一个脏袍斯案例啊,然后比如说这里面有一个生产者啊,双击打开,打开之后这里面诶,比如说这也是这个卡巴车构造啊,这。这不是前面是属性配置信息,然后再来一个他吗。那好多同学说看这个源码有点别扭,变证的原因是什么呢?你看它这个pro,它是实现了一个线程啊,通过线程这种方式进行调用的叭,如说构造构造加载,加载完之后,然后入方法,然后执行啊,执行相关功能啊,然后这里面我带回调啊,相关的处理其实呢,不是特别难啊,那我们可以大概从这里看啊,这个可以帮我们进行注释。那比如说我们仍然是从这进来,比如说又一个卡a produce,看一看又一个卡巴produce到底干了哪些事,你们按住CTRL键啊,然后点开,点开之后这是this,然后再往进构罩。
03:00
再构造再进再进,那进到这之后呢,这就是它对应的源码了,哎,卡巴源码,那进来之后首先看到的就是这个室外地对吧,那注释一下啊,你看这里面它就可以帮我们进行一个。编写了,比如说这里面获取。是外地。这是第一件事,放大一点,然后下面呢,这里面还有一个获取客户端ID。那这两个ID有什么用啊?获取客户端ID,你看之前我们如果说,哎用到事物的话,是不是必须得初始化一个事ID,那没有这个事ID的话,直接就报错了啊。那再有就是这个客户端ID,你想这是卡瓦集群,那你外面呢,有N多个生产者和N多个卡法消费者,那么是不是每一个客户端都有一个唯一的客户端ID标识啊,这样这个服务端才知道啊,是谁给我发送的数据啊,所以说这个呢,就是客户端ID唯一标识。那么再往下走,下面往下看啊,说这块呢,是log相关处理的,记住在看源码的时候,一般log相关的一些事情,其实一般我们不是特别关心啊,因为呢,它不是它一些核心功能,其实是帮我们记录一些数据的啊,一般我们不看啊,往下看,往下走啊,走到哪呢?走到这这有一个GSGS这个呢,其实就是监控卡。
04:17
数据的啊,这个要知道啊。监控看不看?运行情况的。哎,这个呢,稍微了解一下就行,不是我们特别重要的,那如果你像那个用到了卡法1O,或者你自己需要呃,监控卡法的一些运行参数的时候,那这时候那这个参数候才比较重要啊,那再往下看看我们比较关心的啊,这个比较关心了叫啊partitioner,那这个呢,就是对应的这个分区器啊。获取分区器。那么获取分区器,你往下看看谁呢?你看这里面有一个哎producer啊,这个参数大家都熟对吧?哎,配置生产者相关配置信息的,然后点开它,按住CTRL键点。
05:02
这谁呀,哎partan.class我们自定义分区器的时候,是不是就有自定义的分区器,哎那个全类名是不是就复制给他了,哎对,哎,如果你用户是哎自定义的,那就输给他,那如果不是自定义的是不是用默认的,哎默认的就是default parter啊那就记住啊,就这个这地方呢,就是分居器相关的处理,那下面再往下看这一块,这是K的序列化对吧?IK的序列化,那K的序列化。我把这个图给你截出来啊出来。大家一个一个去对。这样看起来就容易一些了啊,刚才呢,我们是不是有一个获取分析器,是不是这个地方是不是有了啊,然后现在呢,我们是不是有这个序列化啊,序列化好。往那一放。那这个呢,是叫P和Y流的虚化。好,Value去化。那么key y的句体化,你可以看一下这个参数叫producer con key sible啊,然后class conig,你看点开来,点开来之后是不是key的句子化对吧?哎,以前我们配置的都是它啊,然后下面的Y6呢,找一下Y6Y轴的系动化在这呢点开。
06:11
是不是Y流序列化呀,哎,现在呢,就都找到了啊,那再往下看,那除了它之外,我们是不是还有一个对应的叫拦截器啊,那拦截器你看这是啥。这是不是就是对应的这个拦截器,那拦截器里面你看有一个producer config intercept啊,然后对应的class config那点开。In intercept class,比如说未来你要自定义拦截器的时候,其实也是你定一个类,然后呢,未来诶把那个类呢,全类名复制给他,那这样就能跟你对的这个代码啊进行一个关联了哈,好,那反过来你看这不就是。拦截器相关处理吗?就这样啊好,那再往下看,那下面这个呢,还是拦截器,那你看这里面涉及到了说intercept s什么意思,哎,其实呢,它可以定义多个拦截器组成一个叫拦截器链啊,比如说拦截器呢,可以有多个啊。
07:10
组成拦截系调,那再往下面看这个值。这一值叫什么呢?叫max request size啥意思?这个值还记得吗?这时呢,是控制单条日志的大小。控制。单挑。日志大小,那默认是多少呢?默认是一兆,还记得这个,那我们来看一下啊,你记不住的话点开它,点开它之后,这里面有叫must request size,然后把它复制到哪呢?复制到官网在这。那你点开之后,你就发现啊,这个参数是不是这个值啊,啊这个值呢,大小呢,就是一兆啊一兆之前咱们讲过对应的这个参数啊,单条大小控制值就是它。那你看现在不就对应上了吗?那再往下看,下边还有个什么呢?叫total memory size,那它对应的值叫buffer memory can打开呗,这是不是那个32兆啊哎8FOR memory,那你要不确认的话。
08:07
很威。来了吗?哎,32兆啊,32兆。回来。再就是缓冲区大小。默认32兆。那再往下这是默认啊。下边呢,这个是对应的压缩类型的一个处理,那你看这个是啊压缩类型,诶点开点开就是它呗,那这个压缩类型之前咱们也讲过。对吧,哎,这里面有这个jstd l j four snapp,还有这个G啊,以及对应的producer啊好。那行,那这个是压缩相关的处理。亚索。默认呢,是那。
09:01
那再往下,下面呢,这个是往这走这版本的啊,这个咱们看啊看这个叫accumulator,那这个accumulator是谁呢?赶紧看一下这个。哎,叫record accumul是谁呀?哎,就是这个32兆缓存区大桥啊。缓冲区对象嘛,对象那这个默认呢是32兆。那这里面它给你配置了哪些参数啊,你看在创建的对象的时候,这里面传入了这么多参数,那这一个参数呢,叫log context上下文环境啊,那之后呢,是叫by size con,那这个BA size con是多大了?还记得吧?哎,是不是那个16K。打开。带到这儿。是那个16K那个大小吧,啊,就是它啊这之前都讲过,那这里面就快速过了啊。回来啊,你说第一个参数呢,是对应的叫。P大小。
10:01
大小默认16K。那再往下呢,这个是压缩方式啊,那第三个参数压缩方式。那默认的是那。再往下,这下边有一个ler Ms,那L格MS这个参数也出来了,那L格MS是多少呢?点进来,进来之后你看一下小ma mini说是林格MS这个参数和int最大值,它俩取最小的。那这个link Ms默认是不是零啊,那你跟那个int最大值比的话,那是不是肯定取它呀啊,它其实就是防止你这个links的值超过这个int的最大值啊,是这个意思啊呃,做了一个防护,那来看一下吧,这个值0Ms,这大家都熟啊,然后来也给大家查一下。快速回忆一下。你看对应的值么?默认是零啊零行,那再回来。
11:00
记一下。默认是零,好。那再往下走啊,下面呢,这是rere back啊,这个是rere的这个时间啊,Re重试的那就不管了,往下走看下面这一个又一个bar for po,哎,其实就是又一个缓存池啊,其实也叫内存池,这个概念有吧,叫内存池。内存池里面,你看它对应的值。P。啊,第一个呢是memory大小,那是不是总的memory大小啊,其实是总共呢大小呢是32兆,然后之后呢,这里面是有一个BA size啊,也就是说那内存池当中,你看这这意思啊,看好了是内存池啊总共的大小呢是32兆啊那每一批次呢,呃,创建一个批次呢,是不是16K啊,你看是创建16K啊,这就是这个东西啊。那再往下。往下看,那下面这个呢,是叫boot server config,那这个太熟了,那这个目标什么,是不是连接上卡玛集群呢。
12:09
好不好继续。地址。哎,这呢,就是地址相关的配置,那你要改的话,其实改的这个只是啊点开。是不是这个。叫boot。再回来。那下边往下走,下边呢这块呢,有一个获取原数据,其实啊,这个生产者在发送数据的时候是必须得获取原数据的,要不然他是不知道发网到卡发哪个集群的,比如说你看啊,你这边生产者要发送数据,那你发送数据得知道这个这个主题是不是得有多少个分区,每个分区在什么位置啊,那是不是哎得对方给你啊,哎,所以说这这里面其实有一个过程呢,是发送获取原数据,然后这面给他原数据之后呢,才能进行发送啊。那这个呢,其实对我们来说啊,这个增长环境当中啊,关系不大,那你就知道有这么事儿就行了,所以呢,就叫获取原数据。
13:00
那再往下找啊,就是挨着处理三三线程好。看什么呢?咱们说啊,这里面咱们生产者呢,一共两个线程,一个是main线程,这应的就是三轮线程,那刚才我们看到什么拦截器啊,去对化器呀,啊,分区器啊,以及这个缓冲器大小是不是都是对应的,这个main线程当中呢,因为我从魅方法进来的吗?对吧?啊,从这个酶方法进来之后,这个3D还没看到,那3D在哪呢,马上闪亮登场。那对应呢,这里面就是又一个三,看到没来你一个三,那好,那三到底是什么看点开。点开之后你看一下啊,这里面啊用了一个三,然后三点里面有个谁呢,叫markx in flight request,这参数熟不。Must in Fla request是不是它呀,哎,在这个三线程里面,其中第一个啊,就是缓存请求的个数。个数默认是几个呢?默认是五个啊。
14:00
好,那下面往下看啊,下面呢,是这个请求啊,时间请求时间,比如说你这个客户端啊。后端跟他进行一个发送请求的时候,是不是有一个超时啊,你别我这边一直一直进对你进行一个访问,你这边也不搭理我是吧?啊,那这也不行,那这里面有一个。请求事件。请求超时时间,那么这个超时时间是多久呢?来看。点开,点开之后就是request time Ms,其实是30秒,我印象当中啊。看一下哎,对是30秒啊30秒。长时间默认。30秒啊,也就是说30秒没有应答,那我就进行一个重试了,是吧?啊重试。大家都往下走,再往下走,下面这块有个谁呢?又来一个network client,那你看这个network client。是不是就是他呀,哎,就是创建这么一个客户端对象,主要用来跟服务端进行一个请求的。
15:03
然了,那看这里面它有哪些参数呢?那我们关心的客户端ID,这是你得知道啊,你是哪一个客户端。下吧。创建一个客户端。对象,那客户端对象当中啊,这里面比较关键的参数,第一个参数CID就是你客户端ID。你告诉我你是谁对不对?嗯,那下一个呢,还有对应的叫marks in request。这个那这个上面已经说过了,缓存请求个数默认是不是五个。他啊。再往下走。下面还有一个呢,这个值叫recconnect back of。MS其实呢,就是这个REC是不是重试啊,啊也就重连,比如说你第一次,比如说访问没连上,那我们再来一次啊,重连的一个是重试时间。他拿来。
16:00
那好,那你重试的话,比如说那我重试多少次啊,那这里面有一个最大的总的一个重试时间,比如说你别一直跟那重试是吧?啊有一个总的。重试时间,比如说你第一次重试啊是五秒啊,我重试一次,那再来一次又有五秒又五秒,那比如说总共我只允许你是十分钟啊,那你总的重时间啊,十分钟啊就OK了啊。那下面呢,还有一个这个叫send buffer con,比如说你发送数据,你这边是客户端,这边是服务端,你往这边发送的时候,我说的一个发送的一个缓存的,比如说缓存缓整多少数据,那这里面来看一下啊,叫发送缓存。距离大小,那这个大小是多大呢?你进去看一下啊。点开。分开之后是他。是多少,哎,发送的缓存呢,是128K哈。
17:01
叫默认。128KB。那你有发送就得有对应的接收,因为服务端是不还需要对你客户端进行一个应答呀,那里面接收数据的话也有一个缓存,那这个缓存区大小是多少呢?这叫接收数据缓存。那接收数据缓存这呢啊,RECEIVE8方肯定是一个点开。蝴蝶。找到。长大之后呢,退回。放到这儿。那下面我们来看一下这个接收数据缓存的一个大小啊,拿过来。哎,这个是啊,呃,它这个大小呢,是32K 32K。比上一个呢要小一点啊,这个是默认。32KB。啊,那这是对应的它的大小,那下面呢,我再往下看什么socket的啊,通讯啊,超时时间啊等等,那这些呢,我们就不是特别关心啊,那往下看有个谁呢?有一个这个叫ACK斯这个大家啊一看哦哈,这个终于知道他是谁了。
18:11
是不是这个位置,哎,零一和对应的负一啊是它啊对应它的一个配置,那这个呢,就是你看很这ACK4,那就来源于这里面啊对应的一个值是吧?啊你进去进去之后这里面有谁呢?是不是有一个AC斯con,你看获取用户的配置的一个con吗?那点开点开之后不是他吗?啊IC啊。那回来吧,回来之后,那这里面你要记住啊,零。生产者。发送过来不需要韵达啊。那么AC上如果等于一的话呢,那就是。收到。你拿。那如果是负一或者二的话,那就是和SR队列里面。
19:04
呃。和SR队列里面,哎,所有的都收到了。定拿,哎这个级别呢,要高一些啊,那下面我们来看一下,哎,下面这有一个三啊,创建了一个三,那这个三它是一个什么呢?那我们来看啊,点开,点开之后你看一下这个三,这是一个构造,那往上看。是什么?哎三呢,它实现了一个random接口,哎,其实呢,是一个线程啊,那在这个线程里面,它创建的时候干了什么事回来。在这那在这里面啊,它还是继承了之前的客户端啊,然后原数据以及accumulator是不是32兆缓存,再往下面呢,这是max request size是不是那个单条信息最大值是不是一兆啊,然后呢,这次request,比如说重试的次数,这个呢,是的,这个时间间隔啊,时间间隔啊,时间间隔呢是100毫秒啊。
20:06
让那这些参数呢,大家知道就行了啊,他说这块呢是。创建3D线程。哎,创建完,那创建完之后我们要返回了啊,注意啊,我们是从这个NEW3啊创建进来的,然后往回走往回走。别走,晕了啊,你看回到这儿啊,又回到这儿了,哎,这个3D线程往下看,那这个3D创建这个线程给谁了呢?哎,它放到了一个叫new卡rightad,那他为什么要放到这里面呢。那这里面看这个呢,是re包传进来的,是不是那个三啊,是不是第二个参数啊三,然后之后呢,这传进来一个mon demomon啥意思呢?啊demomon啊说他是true。Demon的话,其实就是将这个线程放到后台进行一个运行,你看把这个配置的slide啊,这是处啊进来进来之后你看它是true side demon就是把它放到后台进行一个启动。
21:03
回来。那这块呢,是。三。线程放到后台。那那之后呢,这个放到后台之后,它是不是给了一个IOTH啊,又是一个线程,你看一下是不是。是不是又是一个线程啊啊又是线程,那这个线程卡调用这个star方法,那这块就是真正的启动3D线程。来启动它,那调用这个star的方法,大家都是老司机了啊,那这个线程启动的话,是不是执行这个线程里面对应的这个run方法呀,啊对应的run方法好,那你就那执行这个三的转方法呗,那转方法在哪呢?进去。进去之后是不是刚才这里面啊,哎,是这个三德的run方法,那看一下呗,它的run方法里面干了什么事看。
22:02
点开这个。是在这呢,哎,Run方法,那它这个run方法里面,诶这个running其实在前面已经支撑出了啊,然后之后呢,是run ones也说在这儿一直循环等待,那现在这个res它能不能获取到数据呢。哎,其实他目前还获取不到数据,因为啥呀,因为这个主线程当中是不还没有把数据发送到这里面去啊,啊也就说现在呢,只是初始化啊,初始化的时候啊,把所有这些组件都已经初始化完毕了,那么现在还没有真正的去开始读数据啊,这个地方一定要注意,那行,那整个刚才这个过程呢,就是可把这个初始化的一个过程。那来看一下啊,其实刚才初始化的过程啊,如果大家啊比较晕的话啊,或者说这个,哎,好跟我这个记得哎,不是特别好,有点记不住,记不住怎么办呢?哎,这里面其实我已经给你写好了对应的PPT,比如说啊。打开之后,如果你是自定义的话,进来进来之后啊,连续点击三次这个this啊获取4ID,获取库的ID,哎,这个监控相关配置参数,然后呢,分区器啊,序列化器,拦截器以及单条信息默认大值之后呢,是缓冲器大小三12兆,创建这个缓冲队列,你看这些值都给你放好了,连接卡法集群,哎,然后获取数据,然后呢创建三条线程,哎,然后启动三条线程。
23:20
那么三在现场里面干了什么事呢?诶,手机打开。那么创建这个三之后,哎,我们new了一个network client,那在这里面啊,有对应的这个缓存啊请求,比如说默认的是呃五个,然后下面这些对应的值啊之后呢,是配置AC级别零一负一,下面呢,是真正的去创建了这个三对线程之后。OK,然后下面是启动这个三线程,那这里面调用这个start啊一执行,那一执行的话,它就开始启动了啊,那刚开始的时候呢,它是拉不到数据的,直到这个main线程啊啊往这个呃,缓冲区里面发送啊满足条件的这个数据之后,那么这个三呢,才会正式的一个启动啊,那就呢,大家呢,以后呢,看这个代码的时候,你可以先看一下哎,我这几个框图哎,看完之后你再看下面的源码啊,这个源码的下面我都给你标注出来了哈,标红的啊一步一步呢,你就按照这个往下走,你看。
24:14
按一步往下走就行了。都非常清楚啊,而且这里面有对应的这个注释,那当然你像我刚才那种啊,边看源码边注释啊也行啊,但是那个呢,呃,对大家这个初学者来说啊,要求呢,相对来说要高一些啊同志们啊,所有的值啊,记得都比较详细啊好。
我来说两句