Zookeeper基础
# Zookeeper基础
# 一、什么是Zookeeper?
Zookeeper=文件系统+监听通知机制,用来解决分布式应用中的数据管理问题。比如让多个客户端都登记注册在一个目录节点,其中放着客户端的配置信息,当目录节点发生变化,zookeeper就可以通过watcher动态通知客户端进行响应的处理。(实际上是一种观察者模式)

# 二、Zookeeper节点类型?
1.持久化节点:客户端与Zookeeper断开连接后,该节点依旧存在。
持久化顺序编号节点:Zookeeper会给持久化节点进行顺序编号。
2.临时节点:客户端与Zookeeper断开连接后该节点删除。
临时顺序编号节点:Zookeeper给临时节点编号
注意同一个Zookeeper的znode目录下,节点名称是唯一的。(类似于文件系统同一个目录下文件名唯一)分布式锁实现方式就是基于这个机制。
# 三、Zookeeper集群分为几种角色?怎么保证主从节点状态同步?
1.leader:事务请求的唯一处理者,只能由leader处理写请求。
follower:对于事务请求把它转发给leader;Leader执行事务时进行投票
2.Zookeeper通过ZAB协议保证主从一致性。分为两个模式:
①恢复模式:当leader主机宕机或者leader主机和过半follower失去联系。这时候需要重新选举新的leader,然后把leader数据同步到各个follower节点。
选举机制:首先一开始每个服务器都投自己为leader,然后把投票发给各个服务器。服务器收到其它的投票后会与自己的投票进行PK(检查两个id变量)。每次投票都会统计,有超过一半的服务器收到相同的投票,那么该投票的候选人就会成为新的leader。
②广播模式:客户端发起一个写操作请求后,leader会转换一个事务并给其分配一个全局ID(保证消息处理顺序),会把这个事务通过队列发送到每个follower,每个follower从队列中取出并处理完事务后,会发送一个ACK给leader;当leader收到超过半数的ACK后,就会给所有follower发送commit将前一个事务提交(包括自己的事务)。
因为只是过半的ACK,因此不能保证强一致性。

# 四、znode节点的监听机制?
客户端在服务端znode节点上注册一个Watcher监听器,当znode节点发生变化时,就会触发znode的注册时间,客户端就会收到znode节点改变的异步通知,然后做出对应业务的改变。
# 五、什么是Zookeeper命名服务?
1.比如一个znode下有一个生产者节点和一个消费者节点,生产者节点可以把资源的名字或者地址放到znode下完成服务的发布,然后消费者可以通过znode节点读取该资源路径访问。其中Zookeeper会定时检查资源路径是否失效,并动态通知生产者和消费者。