阅读本文可以带着下面问题:
1.Zookeeper客户端有几部分组成?

2.那个模块管理所有网络IO的模块?

3.Watcher是否允许多个Client对一个或多个ZNode进行监控?

4.Zookeeper实例被创建时,会随之创建几个线程,各自是什么?

5.真正处理网络IO的是那个线程?

 zookeeper的源码分析

模块:

我们可以认为ZK的Client由三个主要模块组成:Zookeeper, WatcherManager, ClientCnxn

Zookeeper是ZK Client端的真正接口,用户可以操作的最主要的类,当用户创建一个Zookeeper实例以后,几乎所有的操作都被这个实例包办了,用户不用关心怎么连接到Server,Watcher什么时候被触发等等令人伤神的问题。

WatcherManager,顾名思义,它是用来管理Watcher的,Watcher是ZK的一大特色功能,允许多个Client对一个或多个ZNode进行监控,当ZNode有变化时能够通知到监控这个ZNode的各个Client。WatcherManager就管理了ZK Client绑定的所有Watcher。

ClientCnxn是管理所有网络IO的模块,所有和ZK Server交互的信息和数据都经过这个模块,包括给ZK Server发送Request,从ZK Server接受Response,以及从ZK Server接受Watcher Event。ClientCnxn完全管理了网络,从外部看来网络操作是透明的。

线程:

每当我们创建一个Zookeeper实例的时候,会有两个线程被创建:SendThread和EventThread。所以当我们使用ZK Client端的时候应该尽量只创建一个Zookeeper实例并反复使用。大量的创建销毁Zookeeper实例不仅会反复的创建和销毁线程,而且会在Server端创建大量的Session。

SendThread是真正处理网络IO的线程

相关文章:

  • 2021-11-19
  • 2021-06-13
  • 2022-01-23
  • 2021-09-25
  • 2021-06-24
  • 2021-07-16
  • 2021-06-15
  • 2022-01-19
猜你喜欢
  • 2021-12-20
  • 2021-04-12
  • 2021-09-16
  • 2021-11-06
  • 2022-12-23
  • 2021-10-13
  • 2021-12-20
相关资源
相似解决方案