文档章节

大数据教程(3.3):zookeeper简介

em_aaron
 em_aaron
发布于 2018/07/28 22:55
字数 1084
阅读 90
收藏 1

       一、概念

        ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,是Hadoop和Hbase的重要组件。它是一个为分布式应用提供一致性服务的软件,提供的功能包括:主从协调、服务器节点动态上下线、配置维护、域名服务、分布式同步(分布式共享锁)、组服务等。ZooKeeper代码版本中,提供了分布式独享锁、选举、队列的接口,代码在zookeeper-3.4.3\src\recipes。其中分布锁和队列有Java和C两个版本,选举只有Java版本。

        Zookeeper本身就是一个分布式集群程序,集群的角色:Leader 和follower(Observer)只要集群中有半数以上节点存活,集群就能提供服务。由于zookeeper的以上特性,集群部署时,需安装为基数太。

 

       二、 原理

         ZooKeeper是以Fast Paxos算法为基础的,Paxos 算法存在活锁的问题,即当有多个proposer交错提交时,有可能互相排斥导致没有一个proposer能提交成功,而Fast Paxos作了一些优化,通过选举产生一个leader (领导者),只有leader才能提交proposer,具体算法可见Fast Paxos。因此,要想弄懂ZooKeeper首先得对Fast Paxos有所了解。 
        ZooKeeper的基本运转流程:
        1、选举Leader。
        2、同步数据。
        3、选举Leader过程中算法有很多,但要达到的选举标准是一致的。
        4、Leader要具有最高的执行ID,类似root权限。
        5、集群中大多数的机器得到响应并接受选出的Leader。

       三、特点

        在Zookeeper中,znode是一个跟Unix文件系统路径相似的节点,可以往这个节点存储或获取数据。如果在创建znode时Flag设置为EPHEMERAL(短暂的),那么当创建这个znode的节点和Zookeeper失去连接后,这个znode将不再存在在Zookeeper里,Zookeeper使用Watcher察觉事件信息。当客户端接收到事件信息,比如连接超时、节点数据改变、子节点改变,可以调用相应的行为来处理数据。Zookeeper的Wiki页面展示了如何使用Zookeeper来处理事件通知,队列,优先队列,锁,共享锁,可撤销的共享锁,两阶段提交。

        

        四、Zookeeper文件系统
        每个子目录项如 NameService 都被称作为znode,和文件系统一样,我们能够自由的增加、删除znode,在一个znode下增加、删除子znode,唯一的不同在于znode是可以存储数据的。 
        有四种类型的znode: 
        1、PERSISTENT-持久化目录节点 
        客户端与zookeeper断开连接后,该节点依旧存在 
        2、PERSISTENT_SEQUENTIAL-持久化顺序编号目录节点 
        客户端与zookeeper断开连接后,该节点依旧存在,只是Zookeeper给该节点名称进行顺序编号 
        3、EPHEMERAL-临时目录节点 
        客户端与zookeeper断开连接后,该节点被删除 
        4、EPHEMERAL_SEQUENTIAL-临时顺序编号目录节点 
        客户端与zookeeper断开连接后,该节点被删除,只是Zookeeper给该节点名称进行顺序编号 

        

        五、Zookeeper通知机制
        客户端注册监听它关心的目录节点,当目录节点发生变化(数据改变、被删除、子目录节点增加删除)时,zookeeper会通知客户端。

 

        六、zookeeper使用场景

(1)采集任务接管

(2)服务主从选举

(3)分布式共享锁

(4)配置中心

 

        最后,zookeeper的使用场景当然不局限于博主举例出来的这几种,还有如dubbo将其使用为服务器注册中心、负载均衡等等;如果您对这块知识非常感兴趣,请关注博主并欢迎同博主交流。今天的教程就到这里,如果大家觉得博主的分享不错,请点赞支持博主。

 

        参考文献:https://yq.aliyun.com/articles/588640

© 著作权归作者所有

em_aaron
粉丝 87
博文 133
码字总数 223239
作品 3
黄浦
高级程序员
私信 提问
大数据教程(3.9):zookeeper分布式应用系统服务器上下线动态感知程序开发_

之前在zookeeper介绍时,有提到过zookeeper的应用场景有服务器上下线动态感知、分布式共享锁等等。本节博主将为大家提供一个分布式服务动态感知的事例,在后期博主的开源项目中的自己开发远程...

em_aaron
2018/08/05
25
0
大数据教程(3.10):zookeeper分布式共享锁的程序

本节博主将为大家提供一个分布式共享锁的事例,由于分布式共享锁在很多场景下均需要使用,非常的重要。所以,大家一定要掌握这块知识点。 对于还不清楚分布式共享锁原理的请先看之前的文章大...

em_aaron
2018/08/05
45
0
ZooKeeper教程资源收集(简介/原理/示例/解决方案)

菩提树下的杨过: ZooKeeper 笔记(1) 安装部署及hello world ZooKeeper 笔记(2) 监听数据变化 ZooKeeper 笔记(3) 实战应用之【统一配置管理】 ZooKeeper 笔记(4) 实战应用之【消除单点故障】...

easonjim
2017/09/05
0
0
Apache ZooKeeper 3.3.4 发布

ZooKeeper是Hadoop的正式子项目,它是一个针对大型分布式系统的可靠协调系统,提供的功能包括:配置维护、名字服务、分布式同步、组服务等。ZooKeeper的目标就是封装好复杂易出错的关键服务,...

红薯
2011/11/30
1K
0
大数据开发之zookeeper简介

首先安装hadooper必须安装zookeeper。 zookeeper在hadoop生态圈中起的非常重要的作用,一句话就是ZooKeeper是分布式系统中的协调系统。 浅谈zookeeper:zookeeper是什么? ZooKeeper是一个分布...

大数据陈斌
2018/05/21
0
0

没有更多内容

加载失败,请刷新页面

加载更多

《JAVA核心知识》学习笔记 (19. 数据库)

19.1.1. 存储引擎 19.1.1.1. 概念 数据库存储引擎是数据库底层软件组织,数据库管理系统(DBMS)使用数据引擎进行创建、查询、 更新和删除数据。不同的存储引擎提供不同的存储机制、索引技巧...

Shingfi
6分钟前
1
0
三分钟手操自己的yum源

本文章原创首发公众号:编程三分钟 上次就想手操yum源了,考虑到有的朋友没接触过,直接写成了yum源的科普,活活憋了我一个星期,现在我们快快开始。 什么情况下我们需要搭建一个仓库呢? 记...

编程三分钟
10分钟前
2
0
一起来学Java8(二)——Lambda表达式

Lambda简介 什么是Lambda表达式,简单的说是一种匿名函数表达方式。因此Lambda表达式本质是个函数,只不过没有函数名称。 Lambda表达式具有以下特点: 匿名,它没有函数名称 本质是个函数,除...

猿敲月下码
12分钟前
2
0
排序算法之希尔排序

1、介绍。 希尔排序(Shell's Sort)是插入排序的一种又称“缩小增量排序”(Diminishing Increment Sort),是直接插入排序算法的一种更高效的改进版本。希尔排序是非稳定排序算法。该方法因D...

daxiongdi
20分钟前
2
0
log4j2入门hello world

1.什么是log4j2 (1)log4j log4j是apache的一个开源项目,表示log for java.是一个日志工具,可以将日志信息输出到文件,控制台等其他地方 ,还可以定义日志的输出格式,另外还有日志级别的区分,可...

Blueeeeeee
22分钟前
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部