ZK单机模式启动流程
2021-09-15 22:53:02   0  举报             
     
         
 zookeeper单机模式下启动流程
    作者其他创作
 大纲/内容
 结束
  否
    execute
  是
  shutdownLatch.await();阻塞主线程
  selectorThreads
  socket
  工作原理图
  启动ZK服务startup
  abstract ServerCnxnFactory.startup()两个类会继承它,默认会以NIO的方式启动可以看到调用前创建的方法cnxnFactory = ServerCnxnFactory.createFactory();
  启动ZK和JVM监控
  client
  每一个连接过来,将连接托付给每一个selector
  workerPool创建工作线程池List<ExecutorService>线程为newFixedThreadPool
  start();
  将所有的连接事件放入一个个的线程池当中,处理客户端的读写事件
  startServer是否需要启动和初始化ZKDataTree
  workerPool
  List<ExecutorService>
  是否启动集群模式
  NIOServerCnxnFactory
  Server
  QuorumPeerMain
  expirerThread
  startup1、启动session会话2、初始化请求处理器链3、启动请求限流器等等
  集群模式启动
  ServerConfig读取配置
  initializeAndRun
  handleIO()将每selector当中的连接放入工作线程池
  acceptThread专门接收客户端连接doAccept()
  shutdown优雅停机
  startdata初始化dataTree,恢复dataTree数据(快照+磁盘log)
  DatadirCleanupManager定时清除快照和日志
  ZooKeeperServerMain
  expirerThread开启一个线程,定时关闭超时连接
  setZooKeeperServer
  NettyServerCnxnFactory
  入口QuorumPeerMain.main()
  开始
  acceptThread
  启动Zk之前会创建一个CountDownLatch(1)在ZK中服务全部都是用其他用户线程维护的,主线程不被停止其他的用户线程才能够工作下去。这个会牵扯到一个ZK优雅停止
  newFixedThreadPool
  ZooKeeperServerMain.main(args)单机模式启动
  containerManager启动容器节点
   
 
 
 
 
  0 条评论
 下一页
  
   
   
   
   
  
  
  
  
  
  
  
  
 