大数据开发之ZooKeeper介绍
一.ZooKeeper简介
ZooKeeper是一个集中的服务,用于维护配置信息、命名、提供分布式同步和提供组服务。所有这些类型的服务都被分布式应用程序以某种形式使用。每次实现它们时,都要做大量工作来修复不可避免的bug和竞争条件。由于实现这些类型的服务很困难,应用程序最初通常忽略它们,这使得它们在出现更改时很脆弱,难以管理。即使正确执行,这些服务的不同实现也会在部署应用程序时导致管理复杂性。
ZooKeeper是分布式应用程序的高性能协调服务。它在一个简单的接口中公开公共服务——比如命名、配置管理、同步和组服务——因此您不必从头开始编写它们。您可以使用它来实现共识、团队管理、领导人选举和出席协议。你可以根据你自己的特殊需要建立它。
上面的解释有点抽象,简单来说zookeeper=文件系统+监听通知机制。
二.ZooKeeper原理
ZooKeeper允许分布式进程通过共享的层级命名空间相互协调,该命名空间的组织类似于标准文件系统。名称空间由数据寄存器组成——在ZooKeeper的说法中称为znodes——它们类似于文件和目录。与典型的文件系统不同,它是为存储而设计的,ZooKeeper数据保存在内存中,这意味着ZooKeeper可以实现高吞吐量和低延迟数。
ZooKeeper实现重视高性能、高可用性和严格有序的访问。ZooKeeper的性能方面意味着它可以用于大型分布式系统。可靠性方面使它不会成为单点故障。严格的顺序意味着可以在客户端实现复杂的同步原语。
ZooKeeper是复制。就像它协调的分布式进程一样,ZooKeeper本身也打算在一组主机上进行复制,这组主机称为集成。
ZooKeeper原理图
image.png
ZooKeeper是有序的。ZooKeeper为每个更新加盖一个编号,该编号反映了所有ZooKeeper事务的顺序。后续操作可以使用该顺序实现更高级别的抽象,比如同步原语。
ZooKeeper很快。它在“以读为主”的工作负载中速度特别快。ZooKeeper应用程序运行在数千台机器上,读操作比写操作更常见时性能最好,比率约为10:1。
Zookeeper是开源的分布式应用协调系统,在Hadoop集群这样的分布式系统(分布式存储、分布式计算),各个节点间需要通过网络来通信,保持各个节点获得信息是一致的,不然可能会出现数据不一致或者任务失败的风险。
当Leader出现故障,会有一个failover的过程,其它zookeeper会选举出新的leader。
可以这么理解,分布式系统需要一个协调者的角色,来保障CAP( C 一致性,A 可用性,P 分区容错性),谁能把这个数据同步的时间压缩的更短,谁的请求响应就更快,谁就更出色,Zookeeper就是其中的佼佼者。它用起来像单机一样,能够提供数据强一致性,但是其实背后是多台机器构成的集群,不会有SPOF。
参考
1.hadoop权威指南
2.https://zhuanlan.zhihu.com/p/69114539