zookerper入门、核心概念和使用场景
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入门、核心概念和使用场景的更多相关文章
- Mycat入门核心概念
Mycat中的核心概念 Mycat中的核心概念 1.数据库中间件 Mycat 是一个开源的分布式数据库系统,但是由于真正的数据库需要存储引擎,而 Mycat 并没有 存储引擎,所以并 ...
- JAVAEE——BOS物流项目13:Quartz入门案例、核心概念、cron 表达式的格式(了解)
1.quartz入门案例 本入门案例基于spring和quartz整合完成. 第一步:创建maven工程,导入spring和quartz相关依赖 第二步:创建任务类 第三步:在spring配置文件中配 ...
- lucene 核心概念及入门
lucene Lucene介绍及核心概念 什么是Lucene Lucene是一套用于全文检索和搜索的开放源代码程序库,由Apache软件基金会支持和提供.Lucene提供了一个简单却强大的应用程序接口 ...
- ElasticSearch入门及核心概念介绍
Elasticsearch研究有一段时间了,现特将Elasticsearch相关核心知识和原理以初学者的角度记录下来,如有不当,烦请指正! 0. 带着问题上路——ES是如何产生的? (1)思考:大 ...
- ZooKeeper入门实战教程(一)-介绍与核心概念
1.ZooKeeper介绍与核心概念1.1 简介ZooKeeper最为主要的使用场景,是作为分布式系统的分布式协同服务.在学习zookeeper之前,先要对分布式系统的概念有所了解,否则你将完全不知道 ...
- Elasticsearch入门教程(二):Elasticsearch核心概念
原文:Elasticsearch入门教程(二):Elasticsearch核心概念 版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:ht ...
- 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,主要 ...
- 从零开始入门 K8s| 阿里技术专家详解 K8s 核心概念
作者| 阿里巴巴资深技术专家.CNCF 9个 TCO 之一 李响 一.什么是 Kubernetes Kubernetes,从官方网站上可以看到,它是一个工业级的容器编排平台.Kubernetes 这个 ...
- dubbo入门学习(一)-----分布式基础理论、架构发展以及rpc、dubbo核心概念
一.分布式基础理论 1.什么是分布式系统? <分布式系统原理与范型>定义: “分布式系统是若干独立计算机的集合,这些计算机对于用户来说就像单个相关系统” 分布式系统(distributed ...
随机推荐
- 关于移动虚拟机后,linux网卡启动异常问题解决
废话不多说,直接上解决办法. 首先执行命令:ifconfig -a 会发现原来是eth0, 而现在变成了eth1了 然后我们编辑规则配置信息: vim /etc/udev/rule.d/70-pers ...
- HTML试题解析
1.关于CSS为什么会出现Bug说法不正确的是(). (选择二项) A:编写CSS样式时需要考虑在不同浏览器中实现表现一致 B:各大主流浏览器由于不同厂家开发,浏览器使用的内核不同,支持CSS的程度不 ...
- restframework之节流
基本思路(原生Django而言): 在django2.x中,若出现节流(访问频率控制)的需求,我们首先想到的是使用一个字典(dict类型)来存储所有IP地址的访问时间记录,这是针对于匿名用户(IP)而 ...
- 【算法编程 C++ Python】根据前序遍历、中序遍历重建二叉树
题目描述 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树.假设输入的前序遍历和中序遍历的结果中都不含重复的数字.例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7, ...
- Maven的具体使用和优点
1.Apache软件基金会提供的项目自动化构建和项目管理软件. 基于项目对象模型(POM)概念,Maven利用一个中央信息片段能管理一个项目的构建.报告.文档等步骤. 官方网站:http://mave ...
- ubuntu之路——day17.2 RGB图像的卷积、多个filter的输出、单个卷积层的标记方法
和单层图像的卷积类似,只需要对每一个filter构成的三层立方体上的每一个数字与原图像对应位置的数字相乘相加求和即可. 在这个时候可以分别设置filter的R.G.B三层,可以同时检测纵向或横向边缘, ...
- 【大数据应用技术】作业九|安装关系型数据库MySQL 安装大数据处理框架Hadoop
本次作业的要求来自:https://edu.cnblogs.com/campus/gzcc/GZCC-16SE2/homework/3161 1.安装MySql 按ctrl+alt+t打开终端窗口,安 ...
- 使用lombok的@Builder的注解的一个坑
一开发说项目报错 java.lang.Long,java.lang.String,java.lang.String,java.lang.String,java.lang.String,java.lan ...
- pycharm安装pyinstaller将pygame打包成exe
首先,使用pycharm自带的下载包工具,File-Settings-Project Interpreter,如图: 安装完成后,发现安装到了Python根目录下,我的在C:\python34\Scr ...
- HTTP协议复习
HTTP请求/响应的步骤: 客户端连接到WEB服务器:浏览器与web服务器的HTTP端口建立一个TCP套接字连接,例如:http://www.baidu.com 发送HTTP请求:通过TCP套接字,客 ...