一、简介

zookeeper是hadoop的一个子项目,A distribute coordination service for distributed applications 为了分布式应用而开发的分布式管理服务。多个server,少数server down不会影响整个分布式服务。

zookeeper简单而又高效的保证是:

1.顺序一致性---从client的更新会按顺序应用

2.原子性---更新要么成功要么失败。没有更新了一半这个说法。

3.可靠性---一旦更新被应用,它就会一直保持着直到下一次被更改

二、特点

zookeeper的数据模型像操作系统的文件结构,每个znode可以有子znode,并且znode可以存数据。不像文件系统是为了数据存储的,zookeeper的数据在内存中,也就是zookeeper能够获得高吞吐量和低延迟。

但ephemeral类型的znode不能有子节点。ephemeral的znode一旦和服务器失去联系,这个znode将自动删除。zookeeper的客户端和服务器采用长连接,通过心跳来保持连接。这个链接称为session,seesion失效会导致ephemeral的znode删除。

znode可以被监控,包括这个目录节点存储的数据的 修改,子节点目录的变化等,一旦变化可以通知监控的客户端,这个功能是zookeeper对于应用最重要的特性,通过这个特性可以实现配置集中管理,集群管理,分布式锁等。

三、zookeeper watches


所有的zookeeper读动作都有一个选项选择是否设置watch。getData(),getChildren(),exists()。watch的定义是:一次性触发,发送给set这个watch的client端,当这个watch的数据发生改变的时候。

One-time trigger

设置znode的watch,当znode发生改变会收到事件。除非重新设置一个watch,否则不会再收到znode改变的事件。

Sent to client

这意味着有可能因为网络的问题,发送改变已经完成,但watch event事件还没到。watch是异步到达的。

The data for which the watch was set。

这指的是一个node可以发生不同的改变方式。data watches and child watches。getData()和exists()设置data watches。getChildren()设置子节点监视。getData和exist()返回node数据,getchildren返回a list of children。

这样setData()会触发设置的znode的data watch,create()会触发创建的znode的data watch和parent node的child watch。delete() 会触发这个node的data watch和child watch,以及 parent node的child watch。

关于watch需要注意的

one-time trigger,so must set again。

因为watch是one有latency的,所以有可能在设置新的watch和得到事件之间znode发生了改变。

一个watch函数只会因为一个通知调用一次。比如:exists和getData注册了同样的watch函数,当这个node被删除的时候,只会触发一次函数。

当和server断掉时,你不会收到任何watch。所以,你要使用session events。

zookeeper 简介的更多相关文章

  1. ZooKeeper简介

    本文中,我们将对ZooKeeper进行介绍.简单地说,ZooKeeper是一个用来在构成应用的各个子服务之间进行协调的一个服务. 由于其本身并没有特别复杂的机制,因此我们将会把更多的笔墨集中在如何对Z ...

  2. Zookeeper简介与安装

    Zookeeper:A Distributed Coordination Service for Distributed Applications. 一.Zookeeper简介 众所周知,协同服务是分 ...

  3. Zookeeper简介与集群搭建

    Zookeeper简介 Zookeeper是一个高效的分布式协调服务,可以提供配置信息管理.命名.分布式同步.集群管理.数据库切换等服务.它不适合用来存储大量信息,可以用来存储一些配置.发布与订阅等少 ...

  4. Zookeeper简介与集群搭建【转】

    Zookeeper简介 Zookeeper是一个高效的分布式协调服务,可以提供配置信息管理.命名.分布式同步.集群管理.数据库切换等服务.它不适合用来存储大量信息,可以用来存储一些配置.发布与订阅等少 ...

  5. Zookeeper简介及单机、集群模式搭建

    1.zookeeper简介 一个开源的分布式的,为分布式应用提供协调服务的apache项目. 提供一个简单的原语集合,以便于分布式应用可以在它之上构建更高层次的同步服务. 设计非常易于编程,它使用的是 ...

  6. Zookeeper简介及使用

    一.Zookeeper简介 1.zookeeper简介 动物管理员 Apache ZooKeeper致力于开发和维护开源服务器,实现高度可靠的分布式协调. 2.什么是ZooKeeper? ZooKee ...

  7. ZooKeeper学习之路(一)—— ZooKeeper简介及核心概念

    一.Zookeeper简介 Zookeeper是一个开源的分布式协调服务,目前由Apache进行维护.Zookeeper可以用于实现分布式系统中常见的发布/订阅.负载均衡.命令服务.分布式协调/通知. ...

  8. ZooKeeper系列(一)—— ZooKeeper 简介及核心概念

    一.Zookeeper简介 Zookeeper 是一个开源的分布式协调服务,目前由 Apache 进行维护.Zookeeper 可以用于实现分布式系统中常见的发布/订阅.负载均衡.命令服务.分布式协调 ...

  9. Zookeeper简介及安装(一)

    1 Zookeeper入门1.1 概述Zookeeper是一个开源的分布式的,为分布式应用提供协调服务的Apache项目. 1.2 特点 1.3 数据结构 1.4 应用场景提供的服务包括:统一命名服务 ...

  10. 第1章 分布式系统概念与ZooKeeper简介

    ZooKeeper分布式专题与Dubbo微服务入门 第1章 分布式系统概念与ZooKeeper简介 1-1 zookeeper简介 1-2 什么是分布式系统 略 1-3 分布式系统的瓶颈以及zk的相关 ...

随机推荐

  1. python学习之——splinter使用

    开始学习使用splinter工具了,目前是摸索中,先熟悉splinter工具的使用方法~~ 实现功能: 打开firefox浏览器->www.baidu.com->输入关键词 python, ...

  2. mysql,实现数据库检索结果添加自增的序号

    select t2.rowno  from( select (@rownum:=@rownum+1) as rowno, t1.id    from news t1 ,(select (@rownum ...

  3. ORACLE 导出(exp) & 导入(imp)

    导出(exp) & 导入(imp)     利用Export可将数据从数据库中提取出来,就是将select的结果存到一个FS二进制文件上    利用Import则可将提取出来的数据送回到Ora ...

  4. PowerShell全自动分配CPU

    代码 $pro = Get-Process foreach ($n in $pro){ if($n.ProcessorAffinity -ne 255){ #continue } if($n.Id - ...

  5. python函数动态参数详解

    Python的动态参数: 1,参数前一个"*":在函数中会把传的参数转成一个元组. def func (*args): print(args) func(123,1,2,'a') ...

  6. tomcat(三)--基本安装配置

    0x01  JDK和Tomcat安装 到oracle官网下载jdk,当前下载的版本是Linux x64 jdk-8u101-linux-x64.tar.gz 到apache官网下载tomcat,当前最 ...

  7. VS2013开发 windows服务 挂到服务器上执行

    这是百度经验的链接,本人主要参考的他.http://jingyan.baidu.com/article/cd4c2979e9330d756f6e6070.html 1 创建windows服务项目 2 ...

  8. 在github上搭建博客的问题

    最近想到要建立一个自己的博客,以便记录自己在学习中遇到的问题.发现github免费提供空间,正好可以利用它来搭建自己的博客.毕竟github pages免费空间,不限制流量,每次的博客改动和博客模板的 ...

  9. mysql的数据转换

    在sql语句中完成对数字类型的数据转换成字符类型的数据.像这次将读取出来的float类型的数据,在进行jsonObject.fromObject(object).toString();这个方法,并没有 ...

  10. php和syslog

    syslog是Linux系统默认的日志守护进程.使用syslog可以方便把指定的事件写入特定文件中,可以让任何事件都登录到一台或多台服务器上. 1.简单例子,先说一下syslog怎么使用,以php为例 ...