zookeeper是一个分布式程序的高性能协调服务,提供集中式信息存储服务,数据存储于内存中,类似文件系统的树形结构,高吞吐量和低延时,集群高可靠,基于zookeeper可以实现分布式统一配置中心、分布式锁、服务注册中心。

  zookeeper的同类产品 consul etcd Doozer等

  单机版安装

  下载tar文件,地址 http://mirror.bit.edu.cn/apache/zookeeper/zookeeper-3.4.14/

  解压后在conf目录增加zoo.cfg(复制zoo_sample.cfg文件,重命名即可),注意配置data的路径

  启动服务端 进入zookeeper安装目录 bin/zkServer.sh start

  客户端连接 bin/zkCli.sh -server 127.0.0.1:2181

  zookeeper常用命令,参考 https://zookeeper.apache.org/doc/current/zookeeperStarted.html ,输出help即可看到

  
  在安装包下有 zookeeper-3.4.14.jar,它就是官方提供的java 客户端,我们可以使用它来操作zookeeper,但是其api太过底层,所以一般使用第三方的客户端,常用的有zkClient和Curator。

  zookeeper核心概念

  1、session

  一个客户端连接是一个会话,由zk分布一个唯一id 客户端以特定的时间发送心跳保持会话,ticktime,超过会话超时时间未收到心跳则判定客户端挂掉,(默认2倍ticktime),会话中的请求FIFO执行

  2、数据模型

  节点类型

  持久节点  create /asd asd

  临时节点 create -e /asd asd  连接断开后即消失

  顺序节点 create -s /asd asd  真实名称asd0000000268(名字+ 10位十进制数字)

  顺序节点 create -s /asd/ asd  真实名称0000000268(10位十进制数字)

  临时顺序节点 create -s -e /asd asd   

  节点数据构成:存储的协调信息和元数据,数据量上限1M

  节点元数据结构:zxid(事务id)

  3、zookeeper中的时间

  Zxid zookeeper种每一次更改操作都对应一个唯一的事务id,称为zxid,它是全局有序的戳记,如果zxid1>zxid2,则zxid1一定在zxid2之后发生

  version number 每次对节点的修改都会使其版本号增加

  ticktime 在使用多服务器时,服务器通过ticktime来定义事件的时间,ticktime仅通过最小会话时间(ticktime的2倍)公开,如果客户端请求的会话时间小于最小会话时间,则服务器会告诉客户端会话超时实际上为最小超时时间

  real time 仅在znode创建和修改时将时间戳放入stat结构中

  4、watch监听机制

  通过help命令我们可以看到ls get 等命令都支持watch,命令使用如下 get /asd 1(boolean值,默认为0,为1时表示监控变化)。watch机制是一次性触发,即只能监控到第一次的变化,若要持续监控,则需要持续设置watch,watch是有序的,客户端先收到watch通知后看到变化。

  因为watch是一次性的,并且在获取通知和发送新的watch请求存在间隙,所以不能可靠的发现节点的每一次变化

  使用场景

  1、配置中心

  主要使用到zookeeper的两个特性,znode存储数据及watch机制,两种使用方式:一个配置项一个znode和一个配置文件一个znode,具体看配置在集群中的差异性。

  2、命名服务

  分布式开发中A服务不依赖B服务的具体ip端口信息,而是根据一个服务名去获取对应的ip端口信息,这样A服务可以先行部署而后监听B服务对应的服务名的变化,而后B服务开发完工后再部署后,A服务不用做任何修改就可以正常访问,具体如下图

  3、master选举

  两种方式:

  (1)争抢创建主节点,集群中各个服务器在申请创建同一个主节点(临时节点)时带上自己的地址信息,但是只有一个会创建成功,其它的创建失败后则后通过获取主节点的值来知道当前主节点是谁,并且注册对主节点的watch,当master挂掉后,对应的主节点也被删除,此时剩下的服务器则又开始新一轮的争抢创建主节点,创建成功的即为下一个master。

  (2)集群各个服务器都申请创建临时顺序节点,序号最小的即为master,master挂掉后其后一个节点对应的机器则为master。

  同时还可以创建一个server节点,所有集群中的节点都来创建一个一个临时顺序节点,利用这个可以做集群管理

  4、分布式队列

  入队:所有生产者往同一个节点下(queue)创建顺序节点

  出队:获取节点下所有子节点,移除最小序号对应的节点

  针对无界队列,可以利用上面所说直接实现,有界队列则需要用到分布式所来实现获取队列元素数目和放入元素同步

  5、分布式锁

  两种方式

  (1)都去创建同名临时节点,创建成功则执行后续逻辑,没有创建成功则注册这个节点的watch

  (2)创建同名临时顺序节点,获取所有子节点,判断自己是否为最小号,是则获取锁成功执行逻辑后删除对应节点,不是则注册前一个节点的watch等待被通知

  

  




zookerper入门、核心概念和使用场景的更多相关文章

  1. Mycat入门核心概念

      Mycat中的核心概念     Mycat中的核心概念 1.数据库中间件    Mycat 是一个开源的分布式数据库系统,但是由于真正的数据库需要存储引擎,而 Mycat 并没有 存储引擎,所以并 ...

  2. JAVAEE——BOS物流项目13:Quartz入门案例、核心概念、cron 表达式的格式(了解)

    1.quartz入门案例 本入门案例基于spring和quartz整合完成. 第一步:创建maven工程,导入spring和quartz相关依赖 第二步:创建任务类 第三步:在spring配置文件中配 ...

  3. lucene 核心概念及入门

    lucene Lucene介绍及核心概念 什么是Lucene Lucene是一套用于全文检索和搜索的开放源代码程序库,由Apache软件基金会支持和提供.Lucene提供了一个简单却强大的应用程序接口 ...

  4. ElasticSearch入门及核心概念介绍

      Elasticsearch研究有一段时间了,现特将Elasticsearch相关核心知识和原理以初学者的角度记录下来,如有不当,烦请指正! 0. 带着问题上路——ES是如何产生的? (1)思考:大 ...

  5. ZooKeeper入门实战教程(一)-介绍与核心概念

    1.ZooKeeper介绍与核心概念1.1 简介ZooKeeper最为主要的使用场景,是作为分布式系统的分布式协同服务.在学习zookeeper之前,先要对分布式系统的概念有所了解,否则你将完全不知道 ...

  6. Elasticsearch入门教程(二):Elasticsearch核心概念

    原文:Elasticsearch入门教程(二):Elasticsearch核心概念 版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:ht ...

  7. JAVA入门(1.JAVA平台应用 2.核心概念:JVM,JDK,JRE 3.搭建JAVA开发环境 4.学习JAVA的原则)

    主要内容: 1.JAVA平台应用 2.核心概念:JVM,JDK,JRE 3.搭建JAVA开发环境 4.学习JAVA的原则 JAVA的平台应用 JAVA的平台应用分为3个部分: 一.JAVA SE,主要 ...

  8. 从零开始入门 K8s| 阿里技术专家详解 K8s 核心概念

    作者| 阿里巴巴资深技术专家.CNCF 9个 TCO 之一 李响 一.什么是 Kubernetes Kubernetes,从官方网站上可以看到,它是一个工业级的容器编排平台.Kubernetes 这个 ...

  9. dubbo入门学习(一)-----分布式基础理论、架构发展以及rpc、dubbo核心概念

    一.分布式基础理论 1.什么是分布式系统? <分布式系统原理与范型>定义: “分布式系统是若干独立计算机的集合,这些计算机对于用户来说就像单个相关系统” 分布式系统(distributed ...

随机推荐

  1. QString 中文编码转换

      版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/xxm524/article/det ...

  2. OpenTK学习笔记(1)-源码、官网地址

    OpenTK源码下载地址:https://github.com/opentk/opentk OpenTK使用Nuget安装命令:OpenTK:Install-Package OpenTK -Versi ...

  3. 网络公开课和MOOC资源

    美国(USA) 1. 麻省理工学院开放课程(Free Online Course Materials/ MIT OpenCourseWare) 2. 耶鲁大学开放课程(Online Video Lec ...

  4. Electron 入门第一篇

    官网:http://electronjs.org/docs/tutorial/application-architecture 转载:https://blog.csdn.net/qq_33323731 ...

  5. MongoDB学习(附录一) 安装mongodb3.6时碰到的问题

    1.Installing MongoDB Compass...(this may take a few minutes)这一步,会停留很长时间,点击取消可能也取消不了. 安装mongdodb ,进度卡 ...

  6. 【Java】单点登录(SSO)

    单点登录介绍 ​ SSO英文全称Single Sign On,单点登录.SSO是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统.它包括可以将这次主要的登录映射到其他应用中用于同一 ...

  7. [译]使用BeautifulSoup和Python从网页中提取文本

    如果您要花时间浏览网页,您可能遇到的一项任务就是从HTML中删除可见的文本内容. 如果您使用的是Python,我们可以使用BeautifulSoup来完成此任务. 设置提取 首先,我们需要获取一些HT ...

  8. 123456123456#1#---###3%%%----com.zzj.SuperPuperID668---前拼show后广--嘻哈水管工-111111

    com.zzj.SuperPuperID668---前拼show后广--嘻哈水管工-1111111111111

  9. Ubuntu新建用户并指定目录

    例如我要新建一个nginx用户,并指定目录,允许使用bash登录 sudo useradd -d "/home/nginx" -m -s "/bin/bash" ...

  10. prettier

     prettier,是一个自以为是 Opinionated 的代码格式化工具,用来批量处理旧代码的统一. 涉及引号,分号,换行,缩进. prettier 支持我们大前端目前大部分语言处理,包括 Jav ...