1.Watches通知是一次性的,必须重复注册. 2.同一个ZK客户端,反复对同一个ZK节点(znode)注册相同的watcher,是无效的,最终只会有一个生效。 3.发生CONNECTIONLOSS之后,只要在session_timeout之内再次连接上(即不发生SESSIONEXPIRED),那么这个连接注册的watches依然在。 4.客户端会话失效之后,所有这个会话中创建的Watcher都会被移除。 5.节点数据的版本变化会触发NodeDataChanged,注意,这里特意说明了是版本变化。存在这样的情况,只要成功执行了setData()方法,无论内容是否和之前一致,都会触发NodeDataChanged事件。 6.对某个节点注册了watcher,但是节点被删除了,那么注册在这个节点上的watcher都会被移除。
再说说几点个人认为比较重要的:
Client与ZooKeeper之间的通信,需要创建一个Session,这个Session会有一个超时时间。因为ZooKeeper集群会把Client的Session信息持久化,所以在Session没超时之前,Client与ZooKeeper Server的连接可以在各个ZooKeeper Server之间透明地移动。
在ZooKeeper集群中,读可以从任意一个ZooKeeper Server读,这一点是保证ZooKeeper比较好的读性能的关键;写的请求会先Forwarder到Leader,然后由Leader来通过ZooKeeper中的原子广播协议,将请求广播给所有的Follower,Leader收到一半以上的写成功的Ack后,就认为该写成功了,就会将该写进行持久化,并告诉客户端写成功了。(有点像Paxos的ZAB协议)
对于每个更新操作,ZK都会在确保事务日志已经落盘后,才会返回客户端响应。因此事务日志的输出性能在很大程度上影响ZK的整体吞吐性能。强烈建议是给事务日志的输出分配一个单独的磁盘。
zookeeper客户端对server的操作都是不可回退的,意思是说,zk的客户端每次和server进行通信的时候,会记住server上最新的zxid。如果某个时刻,客户端和server断开了连接,那么等到下次重新连接到集群中的机器上时,会检查当前连接上的那个server是否和client有相同的zxid,或者已经是更新的zxid了。一旦客户端发现server的zxid比自己小,那么客户端会断开和这个server的连接,并且重新连接集群中的其它server~
ephemeral节点是临时性的, 如果创建该节点的session结束了, 该节点就会被自动删除. ephemeral节点不能拥有子节点. 虽然ephemeral节点与创建它的session绑定, 但只要该该节点没有被删除, 其他session就可以读写该节点中关联的数据. 使用-e参数指定创建ephemeral节点.
如果想对ZK的简单原理有兴趣,可以参见这篇博客:
http://www.wuzesheng.com/?p=2609#more-2609
最后说一下ACL,ACL就是(Access Control)即控制访问znode的权限的。我查了一些资料,分享一下:
建议看原博客,向原博客作者致敬。
***************************************ACL***********************************
以下转自;http://www.wuzesheng.com/?p=2438
传统的文件系统中,ACL分为两个维度,一个是属组,一个是权限,子目录/文件默认继承父目录的ACL。而在Zookeeper中,node的ACL是没有继承关系的,是独立控制的。Zookeeper的ACL,可以从三个维度来理解:一是scheme; 二是user; 三是permission,通常表示为scheme:id:permissions, 下面从这三个方面分别来介绍:
(1)scheme: scheme对应于采用哪种方案来进行权限管理,zookeeper实现了一个pluggable的ACL方案,可以通过扩展scheme,来扩展ACL的机制。zookeeper-3.4.4缺省支持下面几种scheme:
world: 它下面只有一个id, 叫anyone, world:anyone代表任何人,zookeeper中对所有人有权限的结点就是属于world:anyone的
auth: 它不需要id, 只要是通过authentication的user都有权限(zookeeper支持通过kerberos来进行authencation, 也支持username/password形式的authentication)
digest: 它对应的id为username:BASE64(SHA1(password)),它需要先通过username:password形式的authentication
ip: 它对应的id为客户机的IP地址,设置的时候可以设置一个ip段,比如ip:192.168.1.0/16, 表示匹配前16个bit的IP段
super: 在这种scheme情况下,对应的id拥有超级权限,可以做任何事情(cdrwa)
另外,zookeeper-3.4.4的代码中还提供了对sasl的支持,不过缺省是没有开启的,需要配置才能启用,具体怎么配置在下文中介绍。
sasl: sasl的对应的id,是一个通过sasl authentication用户的id,zookeeper-3.4.4中的sasl authentication是通过kerberos来实现的,也就是说用户只有通过了kerberos认证,才能访问它有权限的node.
(2)id: id与scheme是紧密相关的,具体的情况在上面介绍scheme的过程都已介绍,这里不再赘述。
(3)permission: zookeeper目前支持下面一些权限:
CREATE(c): 创建权限,可以在在当前node下创建child node
DELETE(d): 删除权限,可以删除当前的node
READ(r): 读权限,可以获取当前node的数据,可以list当前node所有的child nodes
WRITE(w): 写权限,可以向当前node写数据
ADMIN(a): 管理权限,可以设置当前node的permission
如前所述,在zookeeper中提供了一种pluggable的ACL机制。具体来说就是每种scheme对应于一种ACL机制,可以通过扩展scheme来扩展ACL的机制。在具体的实现中,每种scheme对应一种AuthenticationProvider。每种AuthenticationProvider实现了当前机制下authentication的检查,通过了authentication的检查,然后再进行统一的permission检查,如此便实现了ACL。所有的AuthenticationProvider都注册在ProviderRegistry中,新扩展的AuthenticationProvider可以通过配置注册到ProviderRegistry中去。下面是实施检查的具体实现:
void checkACL(ZooKeeperServer zks, List<acl> acl, int perm, List<id> ids) throws KeeperException.NoAuthException { if (skipACL) { return; } if (acl == null || acl.size() == 0) { return; } for (Id authId : ids) { if (authId.getScheme().equals("super")) { return; } } for (ACL a : acl) { Id id = a.getId(); if ((a.getPerms() & perm) != 0) { if (id.getScheme().equals("world") && id.getId().equals("anyone")) { return; } AuthenticationProvider ap = ProviderRegistry.getProvider(id .getScheme()); if (ap != null) { for (Id authId : ids) { if (authId.getScheme().equals(id.getScheme()) && ap.matches(authId.getId(), id.getId())) { return; } } } } } throw new KeeperException.NoAuthException(); }
相关推荐
大数据学习路线 大数据技术栈思维导图 大数据常用软件安装指南 一、Hadoop 分布式文件存储系统:HDFS 分布式计算框架:MapReduce 集群资源管理器:YARN 单机伪集群环境搭建 集群环境搭建 常用 Shell 命令 Java API ...
五、安全与责任 在使用SSM框架进行开发时,请确保遵循最佳实践和安全准则,以保障系统的稳定性和安全性。在使用提供的资料时,请遵守版权法规,尊重原作者的权益。让我们共同为推动SSM技术的发展而努力!
EasyRpc EasyRpc是基于Netty,ZooKeeper和ProtoStuff开发的一个简单易用,便于学习的RPC框架。 1特性简单易用;注释完善,方便学习;低延迟,基于Netty 4;解决TCP粘包/拆包问题;支持非双向的同步/异步调用;基于...
线上的郑老师是一位经验丰富,技术精湛的大佬,第一个星期,就安排上了四个知识点的学习:docker ,nginx,spring boot和dubbo以及zookeeper。docker 主要是用于软件运行的环境的统一,Nginx主要是用于解决大并发时...
第五章 MapReduce的WordCount案例和分区 第六章 MapReduce的排序和序列化 第七章 MapReduce的运行机制和join操作 第八章 MapReduce的其他操作和yarn 第九章 数仓Hive基本操作 第十章 数仓Hive的其他操作和调优
第五题 如何保证集合是线程安全的.pdf 第八题 Java并发类库提供的线程池有哪几种 分别有什么特点.pdf 第六题 synchronized和ReentLock有什么区别.pdf 第四题 ArrayList LinkedList Vector的区别.pdf docker讲得最...
第一章:jvm、第二章:java集合、第三章:java多线程并发、第四章:java基础、第五章:Spring原理、第六章:微服务、第七章:Netty 与 RPC、第八章:网络、第九章:日志、第十章:Zookeeper、第十一章:Kafka、第十...
第二部分 ZOOKEEPER学习 .......................................................................................................... 24 第6章 zookeeper介绍 ..................................................
第11节:Zookeeper安装启动.avi 第12节:kafka配置.avi3s!?;Y1Y;\;r 第13节:Kafka基本概念及使用演示.avi 第14节:内容概述.avi,t7r-q%z#?3j 第15节:五类Kafka客户端作用和区别.avi 第16节:学习准备-初始化工程.avi 第...
大数据开发面试篇第一部分:大数据开发基础篇一,Java基础 二,NIO基础三,Java并发容器 四,JVM深度解析和面试点先来10篇基础热身再来5篇详细解说五,分布式理论基础和原理六,大数据框架开发基础-Zookeeper七,...
大数据视频学习资料-【课程内容】 01_Linux基础 02_Hadoop 03_Zookeeper 04_Hadoop-HA 05_Hive框架基础 06_Flume 07_Oozie 08_HBase 09_Kafka 09_杂项 10_Storm 11_1离线平台项目测试 11_项目:大数据离线平台 12_...
Prefork异步模型+Zookeeper服务发现 ### 五、提供了什么RPC服务? > + 客户端请求服务端计算一个整数值的斐波那契数列值,当然也可以自行定义 ### 六、项目的组成部分 -------- 该资源内项目源码是个人的毕设,...
大数据视频学习资料-【课程内容】 01_Linux基础 02_Hadoop 03_Zookeeper 04_Hadoop-HA 05_Hive框架基础 06_Flume 07_Oozie 08_HBase 09_Kafka 09_杂项 10_Storm 11_1离线平台项目测试 11_项目:大数据离线平台 12_...
java_learning_practice学习java的积累示例:面试高频算法,akka,多线程,zookeeper,Disruptor,NIO,Netty,Thrift等项目组成收集总结初步&&大数据方向看到的优秀文章和系列博客;不定期更新pdf阿卡口味akka学习...
二、环境搭建:以java应用来讲,比如安装jdk,tomcat,zookeeper,mq,hbase,mysql等等都可以实现自动化。 三、应用部署:GIT代码拉取,MAVEN打包,SFTP上传,Linux脚本执行,自动化一气呵成,且轻松实现切换用户等...
循序渐进,学习Spring Boot、Spring Boot & Shiro、Spring Cloud、Spring Security & Spring Security OAuth2,博客Spring系列源码 ...Spring Boot整合Dubbo&Zookeeper; 监控Dubbo服务 Dubbo的高可用
尤里卡: ://blog.csdn.net/weixin_46185085/article/details/111909549第四章-zookeeper: ://blog.csdn.net/weixin_46185085/article/details/111909985第五章领事: ://blog.csdn.net/weixin_46185085/article/...
Redis分布式锁解决接口幂等的两种方案一、背景二、基础知识三、解决方案四、实验五、说在最后的话 一、背景 还在为不了解分布式锁而烦恼吗?还在为众多微服务接口不幂等而发愁吗?如果是,并且有兴趣同我一起学习,...
大数据开发面试篇第一部分:大数据开发基础篇一,Java基础 二,NIO基础三,Java并发容器 四,JVM深度解析和面试点先来10篇基础热身再来5篇详细解说五,分布式理论基础和原理六,大数据框架开发基础-Zookeeper七,...
**e)** 每隔5分钟,切换一次模拟状态,例如第一个五分钟,车速都在30KM/H以上,下一个五分钟,车速都在10KM/H一下,往复模拟公路一会堵车,一会不堵车的情况。 **f)** 启动zookeeper,kafka,并创建kafka主题,检查...