zk源码理解:
启动zk server肯定会加载main方法,
加载配置文件zoo.cfg
网络通信(socke io)包括: 1.选举(多个zk节点的数据通信) 2.客户端请求(应用程序要链接到zkserver) 3.数据同步(leader和follower之间的数据同步)
执行main方法主要是开始一个thread:将zoo.cfg信息封装到QuorumPeer
1.loadDataBase()//加载数据
2.cnxnFactory.start();//跟通信有关,是一个工厂方法,暴露一个2181的端口,默认是加载的NIO实现
3.startLeaderElection();//开始leader选举-》启动一个投票的监听,初始化一个选举算法FastLeader
4.super.start();//当前的QuorumPeer继承Theard,调用Thread.start();->QuorumPeer.run();
startLeaderElection:
1.先构建一个票据:new vote(myid,zxid,epoch); 用来投票
组装sendQueue,receQueue阻塞队列交给work处理
底层通过sendWork,recvWork封装的sock进行通信,接收和消费票据