浅谈我们为什么需要zookeeper?

大家都知道zookeeper是作为一个分布式协调工具,在很多大数据组件中都有出现
那么zookeeper是如何成为协调工具呢?

首先Zookeeper有自己的文件系统 ,而这个文件系统可以监控目录的变化,这也就是协调工具的核心!

例如hadoop 2.0版本新增的HA功能,实现了namenode的主备切换就是由zookeeper搞定的,如下图:
HA架构图

ZKFC服务中有一个zkClient客户端向zk集群注册了一个目录,这个目录是短暂性目录,只要此zkClient关闭,此目录消失

而备份节点的ZKFC 服务中也有一个zkClient客户端在实时的监控这个目录的变化!一旦此目录消失,则调用回调函数:启动备份节点为主节点

这是zookeeper为hadoop提供的协调服务

那么接下来换一个场景,比如kafka中 zookeeper如何提供协调服务呢

Kafka也依赖zk集群,在kafka0.8版本以前zk用来存储offset及borker节点的注册信息,kafka0.10版本后zk不再存储offset,只存储borker节点信息

那么这里zk的作用是什么呢,看下图:
在这里插入图片描述

那么一旦某个borker宕机,其他两个borker就能监控到变化(观察者模式),从而调用自身的回调函数进行相应的处理逻辑! 例如重新分布数据等等

那么zookeeper自身也有主从结构:
官网图

那么zookeeper如何知晓leader宕机呢?

其实zookeeper自身的各个server也有对应的zkClient,并且实时监控zookeeper目录
在这里插入图片描述

假设Leader宕机,那么此时文件系统中目录会发生变化,因为zookeeper提供了一种暂时目录,创建暂时目录语句为:create -e
当连接的zkClient断开连接,那么在zookeeper中创建的短暂目录就会消失掉

那么此时其他四个server就可以监控到Leader宕机,从而调用自身的回调函数,进行再次选举leader的结构!

我们来看一下zookeeper文件目录:
在这里插入图片描述
这个zookeeper目录就是zk集群自身监控的目录

至此我们明白了zookeeper的作用
在分布式场景中,zookeeper是非常常见的组件,灵活掌握,可以帮助我们理解其他组件

有收获的小伙伴可以给作者点个赞哈~