3 nullguo

尚未进行身份认证

边学边写,边写边学。学习最重要的还是善于总结!

等级
TA的排名 15w+

kafka技术内幕读书笔记(七):控制器

Kafka的控制器除了分区的分配、分区的选举,还有下面这些工作。1.代理节点启动或下线时,处理代理节点的故障转移。2.新创建或删除主题,或新增加分区时,处理分区的重新分配。3.管理所有分区的状态机和副本的状态机,处理状态机的变化事件。控制器选举:Kafka利用了ZK的领导选举机制,每个代理节点都会参与竞选主控制器,但只有一个代理节点可以成为主控制器,其他代理节点只有在主控制器出...

2018-09-10 11:06:25

kafka技术内幕读书笔记(六):存储层

前言:Kafka是一个分布式的(distributed)、分区的(partitioned)、复制的(replicated)提交日志(commitlog)服务。“分布式”是所有分布式系统的特性;“分区”指消息会按照分区分布在集群的所有节点上;“复制”指每个分区都会有多个剧本存储在不同的节点上;“提交日志”指新的消息总是以追加的方式进行存储。日志的读写:分区的每个副本存储在不...

2018-09-10 01:00:49

kafka技术内幕读书笔记(五):延迟操作

延迟的加入组操作:协调者处理不同消费者的“加入组请求”,由于不能立即返回“加入组响应”给每个消费者,它会创建一个“延迟操作”,表示协调者会延迟发送“加入组响应”给消费者。但协调者不会为每个消费者的“加入组请求”都创建一个“延迟操作”,而是仅当消费组状态从“稳定”转变为“准备再平衡”,才创建一个“延迟操作”对象。为了保证只创建一个“延迟操作”,只有消费组的状态为“稳定”时才可以创建“延...

2018-09-09 23:02:00

kafka技术内幕读书笔记(四):消费组协调者

书接上回,实际上,消费者提交偏移量如果存储在ZK中,也是用消费组级别来表示。存储在ZK中天生就具有共享存储的优势,所有的消费者只需要连接ZK即可。而以主题方式存储偏移量时,就得考虑是否需要连接多个服务端节点。每个消费组只连接一个节点是最好的,这个节点负责管理一个消费组所有消费者所有分区的偏移量,叫作偏移量管理器(OffsetManager)。和采用ZK方式将偏移量数据写到ZK不同,消费者...

2018-09-08 14:12:54

kafka技术内幕读书笔记(三):消费者

使用消费组实现消息队列的两种模式:作为分布式的消息系统,Kafka支持多个生产者和多个消费者,生产者可以将消息发布到集群中不同节点的不同分区上;消费者也可以消费集群中多个节点的多个分区上的消息。写消息时,多个生产者可以写到同一个分区。读消息时,如果多个消费者同时读取一个分区,为了保证将日志文件的不同数据分配给不同的消费者,需要采用加锁、同步等方式,在分区级别的日志文件上做些控制。相反,如...

2018-09-08 12:10:09

kafka技术内幕读书笔记(二):生产者

前言:消息系统通常由生产者(producer)、消费者(consumer)和消息代理(broker)三大部分组成,生产者会将消息写入消息代理,消费者会从消息代理中读取消息。对于消息代理而育,生产者和消费者都属于客户端:生产者和消费者会发送客户端请求给服务端,服务端的处理分别是存储消息和获取消息,最后服务端返回响应结果给客户端。客户端和服务端的通信涉及网络中不同的节点,客户端...

2018-09-08 09:47:53

kafka技术内幕读书笔记(一):kafka基本概念

前言:消息队列技术广泛用于异步处理,应用解耦,流量削峰,日志处理等场景,对于一个热爱技术的程序员来说怎么能不去学习这一酷炫的技术呢?而为什么要选取kafka来进行学习?我认为kafka的中文学习资料是比较多的,而且kafka的国内开发者以及使用者比较多,最后是kafka是比较“重”的消息队列,我相信能把kafka搞定,其他的消息队列那也不成问题了!kafka基本概念:分区模型:Ka...

2018-09-08 09:07:56

可伸缩服务架构:框架与中间件读书笔记:dubbo实现原理

前言:在很久之前就对rpc(远程过程调用)框架非常感兴趣,然后主动去学习了阿里开源框架dubbo,最近阿里也是重启了dubbo的更新,dubbo又重新散发出活力。当然学习首先是看dubbo官方文档,官方文档有非常详细的功能说明以及使用方法,对于使用dubbo的开发者已经足够了。最近在实习的公司中也有使用到dubbo来编写接口,我辛辛苦苦学习的dubbo框架终于有了用武之地。但我觉得还不够,...

2018-08-25 23:57:15

为什么最好的单例模式是枚举单例?

前言:单例模式是最常见的设计模式了,无论在面试还是真正的工作时也会大量遇到单例模式,单例模式有懒汉饿汉,双重检查锁,静态内部类等等的实现方式,但在EffectiveJava一书中推荐使用枚举来实现单例模式,那为什么要使用枚举类来实现单例模式呢?枚举单例模式代码:publicenumSingleton{INSTANCE;publicvoidwha...

2018-08-25 22:03:41

java Serializable时两个类同名内部却不一样会发生什么问题?

1.serialVersionUID不一样时,产生InviladClassException错误。2.serialVersionUID一样时,内部的变量类型与变量名一致,但有变量缺漏,比如A类有inta,intb,B类只有inta,这种情况序列化不会报错,缺漏的字段会有默认值,int为0,对象引用为null。3.serialVersionUID一样时,内部的变量类型与变量名不一致,比...

2018-08-18 12:23:11

Mybatis技术内幕读书笔记(七)MappedStatement的解析

  总结:MappedStatement包含了id,sqlSource和sqltype,SqlSource包含了一个dynamiccontext和sqlnode,dynamiccontext里面有sqlbuilder,然后mybatis根据xpath解析xm与用户参数来构建sqlnode的树状结构,sqlnode解析完成后会把解析...

2018-08-11 09:36:46

Mybatis技术内幕读书笔记(六)核心模块

XMLConfigBuilder.parse方法:Resultmaps完整解析如下图:未完待续

2018-08-08 19:45:58

Mybatis技术内幕读书笔记(五)cache模块

MyBatis中缓存模块相关的代码位于cache包下,其中Cache接口是缓存模块中最核心的接口,它定义了所有缓存的基本行为。Cache接口的定义如下:PerpetualCache:PerpetualCache在缓存模块中扮演着ConcreteComponent的角色,其实现比较简单,底层使用HashMap记录缓存项,也是通过该HashMap对象的方法实现的C...

2018-08-08 19:04:39

Mybatis技术内幕读书笔记(四)binding模块(动态代理Mapper)

前言:在iBatis(MyBatis的前身)中,查询一个Blog对象时需要调用SqlSession.queryForObject(”selectBlog”,blogld)方法。其中,SqlSession.queryForObject()方法会执行指定的SQL语句进行查询井返回一个结果对象,第一个参数“selectBlog"指明了具体执行的SQL语句的id,该SQ...

2018-08-08 16:35:28

Mybatis技术内幕读书笔记(三)Mybatis的连接池原理(PooledDataSource)

前言: 了解JDBC编程的读者知道,数据库连接的创建过程是非常耗时的,数据库能够建立的连接数也非常有限,所以在绝大多数系统中,数据库连接是非常珍贵的资源,使用数据库连接池就显得尤为必要。使用数据库连接池会带来很多好处,例如,可以实现数据库连接的重用、提高响应速度、防止数据库连接过多造成数据库假死、避免数据库连接泄露等。数据库连接池在初始化时,一般会创建一定数量的数据库连接并添加到连接池中...

2018-08-08 14:14:40

Mybatis技术内幕读书笔记(二)JDBC反射com. mysql.jdbc.Driver的原理

前言:熟悉JDBC的读者知道,创建数据库连接之前,需要先向DriverManager注册JDBC驱动类。我们以MySQL提供的JDBC驱动为例进行简单分析,com.mysql.jdbc.Driver中有如下静态代码块:DriverManager中定义了registeredDrivers字段用于记录注册的JDBC驱动,定义如下: 回到MyBatis中U...

2018-08-08 13:57:44

Mybatis技术内幕读书笔记(一)Tomcat的类加载器(Classloader)

前言:我也不知道为什么一本Mybatis的书会有Tomcat的相关内容,不过这是个知识点,需要好好记录。什么是类加载器:Java虚拟机中的类加载器(ClassLoader)负责加载来自文件系统、网络或其他来源的类文件。Java虚拟机中的类加载器默认使用的是双亲委派模式,其中有三种默认使用的类加载器,分别是BootstrapClassLoader、ExtensionClas...

2018-08-08 13:09:41

mysql:在执行左右连接时加上and条件会发生什么?

前言:很久之前有想过在执行左右连接时加上and条件会发生什么现象?今天灵光一闪想马上做做实验来验证我自己的想法。结果如下:可以看出,and判断条件为假时,左右连接的主方都不会为null,而从方会被置为null。大功告成!...

2018-08-04 22:31:08

java:能否通过反射获取方法的参数名字?

前言: 最近在牛客网上看到有人分享面试经验,其中有一个非常刁钻的问题:能否通过反射获取方法的参数名字?我我觉得非常奇怪,明明反射获取方法后获取参数(Parameter)中带有getName方法,怎么可能获取不到呢?后续:但在网上翻阅资料发现,原理jdk1.8之前java文件编译成class文件时并不会将参数名字也一起编译进去,而是以arg0,arg1这种模糊名字来替代。所以在j...

2018-07-31 22:11:20

说一下redis中5种数据类型的底层数据结构

前言:阅读 redis设计与实现 一书的记录。未完待续。。。redis我们都知道有5种数据类型,分别是string,list,hash,set,zset,那么你知道它们的底层数据结构实现吗?redis底层有6种数据结构,分别是简单动态字符串(SDS),链表,字典,跳跃表,整数集合,压缩列表。每种数据类型都有着2种以上的数据结构实现,在不同状态下会进行数据结构的转换。现在来看看这6种数据结构是什么吧...

2018-07-12 19:01:30

查看更多

勋章 我的勋章
  • 持之以恒
    持之以恒
    授予每个自然月内发布4篇或4篇以上原创或翻译IT博文的用户。不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!