zookeeper 持久节点和临时节点的区别

最近有些同学过来问我如何判断zookeeper的节点是持久节点还是临时节点?其实很简单,接下来我们就来看看判断方法。

zookeeper 持久节点:该数据节点被创建后,就会一直存在于zookeeper服务器上,直到有删除操作来主动删除这个节点。

zookeeper临时节点:临时节点的生命周期和客户端会话绑定在一起,客户端会话失效,则这个节点就会被自动清除。

我们执行 sh zkCli.sh -server 127.0.0.1:2181登录zookeeper,分别创建一个持久节点和临时节点。

create /yujie-persistent “” //创建持久节点

create -e /yujie-ephemeral “” // 创建临时节点

在这里插入图片描述
接下来我们用get命令 查看节点的Stat数据结构信息
在这里插入图片描述

其中有一个字段是ephemeralOwner意思是这个节点的临时拥有者

当ephemeralOwner 值不为0时,表明这个节点是临时节点,值为会话id.

当ephemeralOwner 值为0时,表明这个节点是持久节点。.

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Chronos,在古希腊语意为时间,是小米公司开发的实现高可用、高性能、提供全局唯一而且严格单调递增timestamp的服务。Chronos 采用主备架构,主服务器挂了以后备服务器迅速感知并接替服务,从而实现系统的高可用。服务端使用Thrift框 架,经测试每秒可处理约60万次RPC请求,客户端单线程每秒可请求6万次(本地服务器),保证高性能与低延时。全局只有唯一的 ChronosServer提供服务,分配的timestamp保证严格单调递增,并且将已分配的值持久化到ZooKeeper上,即使发生 failover也能保证服务的正确性。Chronos依赖ZooKeeper实现与HBase类 似的Leader Election机制,ChronosServer启动时将自己的信息写到ZooKeeper的Master临时节点上,如果主服务器已经存在,那么就记 录到BackupServers节点上。一旦Master临时节点消失(主服务器发生failover),所有备服务器收到ZooKeeper通知后参与 新一轮的选主,保证最终只有一个新的主服务器接替服务。ChronosServer运行时会启动一个Thrift服务器,提供getTimestamp()和getTimestamps(int)接口, 并且保证每次返回的timestamp都是严格单调递增的。返回的timestamp与现实时间有基本对应关系,为当前Unix time乘以2的18次方(足够使用1115年),由于我们优化了性能,所以如果存在failover就不能保证这种对应关系的可靠性。ChronosClient启动时,通过访问ZooKeeper获得当前的主ChronosServer地址,连接该服务器后就可以发送 Thrift RPC请求了。一旦主服务器发生failover,客户端请求失败,它会自动到ZooKeeper获得新的主ChronosServer地址重新建立连 接。 标签:小米
什么是Zookeeper Zookeeper是一个分布式开源框架,提供了协调分布式应用的基本服务,它向外部应用暴露一组通用服务——分布式同步(Distributed Synchronization)、命名服务(Naming Service)、集群维护(Group Maintenance)等,简化分布式应用协调及其管理的难度,提供高性能的分布式服务。ZooKeeper本身可以以单机模式安装运行,不过它的长处在于通过分布式ZooKeeper集群(一个Leader,多个Follower),基于一定的策略来保证ZooKeeper集群的稳定性和可用性,从而实现分布式应用的可靠性。 1、Zookeeper是为别的分布式程序服务的 2、Zookeeper本身就是一个分布式程序(只要有半数以上节点存活,zk就能正常服务) 3、Zookeeper所提供的服务涵盖:主从协调、服务器节点动态上下线、统一配置管理、分布式共享锁、统> 一名称服务等 4、虽然说可以提供各种服务,但是zookeeper在底层其实只提供了两个功能: 管理(存储,读取)用户程序提交的数据(类似namenode中存放的metadata);  并为用户程序提供数据节点监听服务; Zookeeper集群机制 Zookeeper集群的角色: Leader 和 follower  只要集群中有半数以上节点存活,集群就能提供服务 Zookeeper特性 1、Zookeeper:一个leader,多个follower组成的集群 2、全局数据一致:每个server保存一份相同的数据副本,client无论连接到哪个server,数据都是一致的 3、分布式读写,更新请求转发,由leader实施 4、更新请求顺序进行,来自同一个client的更新请求按其发送顺序依次执行 5、数据更新原子性,一次数据更新要么成功,要么失败 6、实时性,在一定时间范围内,client能读到最新数据 Zookeeper数据结构 1、层次化的目录结构,命名符合常规文件系统规范(类似文件系统)    2、每个节点zookeeper中叫做znode,并且其有一个唯一的路径标识  3、节点Znode可以包含数据和子节点(但是EPHEMERAL类型的节点不能有子节点节点类型  a、Znode有两种类型: 短暂(ephemeral)(create -e /app1/test1 “test1” 客户端断开连接zk删除ephemeral类型节点)  持久(persistent) (create -s /app1/test2 “test2” 客户端断开连接zk不删除persistent类型节点) b、Znode有四种形式的目录节点(默认是persistent ) PERSISTENT  PERSISTENT_SEQUENTIAL(持久序列/test0000000019 )  EPHEMERAL  EPHEMERAL_SEQUENTIAL c、创建znode时设置顺序标识,znode名称后会附加一个值,顺序号是一个单调递增的计数器,由父节点维护          d、在分布式系统中,顺序号可以被用于为所有的事件进行全局排序,这样客户端可以通过顺序号推断事件的顺序 Zookeeper应用场景 数据发布与订阅(配置中心) 发布与订阅模型,即所谓的配置中心,顾名思义就是发布者将数据发布到ZK节点上,供订阅者动态获取数据,实现配置信息的集中式管理和动态更新。例如全局的配置信息,服务式服务框架的服务地址列表等就非常适合使用。 负载均衡 这里说的负载均衡是指软负载均衡。在分布式环境中,为了保证高可用性,通常同一个应用或同一个服务的提供方都会部署多份,达到对等服务。而消费者就须要在这些对等的服务器中选择一个来执行相关的业务逻辑,其中比较典型的是消息中间件中的生产者,消费者负载均衡。 消息中间件中发布者和订阅者的负载均衡,linkedin开源的KafkaMQ和阿里开源的 metaq都是通过zookeeper来做到生产者、消费者的负载均衡。这里以metaq为例如讲下: 生产者负载均衡:metaq发送消息的时候,生产者在发送消息的时候必须选择一台broker上的一个分区来发送消息,因此metaq在运行过程中,会把所有broker和对应的分区信息全部注册到ZK指定节点上,默认的策略是一个依次轮询的过程,生产者在通过ZK获取分区列表之后,会按照brokerId和partition的顺序排列组织成一个有序的分区列表,发送的时候按照从头到尾循环往复的方式选择一个分区来发送消息。 消费负载均衡: 在消费过程中,一个消费者会消费一个或多个分区
<h3>回答1:</h3><br/>Zookeeper是一个分布式协调服务,节点Zookeeper中的基本单位。节点有两种类型:临时节点持久节点节点的基本操作包括创建节点、删除节点、读取节点数据、更新节点数据和监听节点变化等。创建节点时需要指定节点类型、节点路径和节点数据。删除节点时需要指定节点路径和版本号。读取节点数据时需要指定节点路径和是否监听节点变化。更新节点数据时需要指定节点路径、新数据和版本号。监听节点变化时需要指定节点路径和回调函数。这些基本操作可以通过Zookeeper提供的API来实现。 <h3>回答2:</h3><br/>Zookeeper是一个分布式协调服务,它为分布式应用提供了协调机制。在Zookeeper中,节点是其最基本的操作单元。本文将详细介绍Zookeeper节点的基本操作。 1. 创建节点Zookeeper中,可以使用create命令创建节点。create命令的格式为: create [path] [data] [acl] 其中,path表示节点的路径,data表示节点的数据,acl表示节点的访问控制列表。 例如,我们可以使用以下命令在Zookeeper中创建一个名为“/test”的节点,数据为“hello world”: create /test hello world 2. 读取节点数据 在Zookeeper中,可以使用get命令读取节点的数据。get命令的格式为: get [path] 例如,我们可以使用以下命令在Zookeeper中读取“/test”节点的数据: get /test 3. 更新节点数据 在Zookeeper中,可以使用set命令更新节点的数据。set命令的格式为: set [path] [data] [version] 其中,path表示要更新的节点的路径,data表示节点的新数据,version表示节点的版本号。 例如,我们可以使用以下命令在Zookeeper中更新“/test”节点的数据为“hello zookeeper”: set /test hello zookeeper 4. 删除节点Zookeeper中,可以使用delete命令删除节点。delete命令的格式为: delete [path] [version] 其中,path表示要删除的节点的路径,version表示节点的版本号。 例如,我们可以使用以下命令在Zookeeper中删除“/test”节点: delete /test 5. 列出子节点Zookeeper中,可以使用ls命令列出一个节点的子节点。ls命令的格式为: ls [path] 例如,我们可以使用以下命令在Zookeeper中列出“/test”节点的子节点: ls /test 上述便是Zookeeper节点的基本操作,通过这些操作我们能够实现Zookeeper节点的创建、读取、更新、删除和子节点的列出等基本功能,从而满足分布式应用的协调需求。 <h3>回答3:</h3><br/>Zookeeper是一个开源的分布式协调服务框架,它为分布式应用提供共享状态和集群管理基础设施。在Zookeeper中,节点是指在Zookeeper上的数据单元,使用路径表示,相当于一个文件系统的路径。节点可以是一个简单的数据节点,也可以是一个临时数据节点和带序列号的数据节点节点的基本操作包括创建节点、删除节点和更新节点的数据。创建节点可以使用create命令,其语法如下: create [-s] [-e] path data acl 其中-s表示创建一个序列节点,-e表示创建一个临时节点,path表示节点路径,data表示节点的数据,acl表示节点的访问控制列表。 删除节点可以使用delete命令,其语法如下: delete path [version] 其中path表示节点路径,version表示节点的版本号。只有当节点的版本号与指定的版本号一致时才能删除节点。 更新节点的数据可以使用set命令,其语法如下: set path data [version] 其中path表示节点路径,data表示节点的新数据,version表示节点的版本号。只有当节点的版本号与指定的版本号一致时才能更新节点的数据。 除了基本操作外,节点还有一些高级特性,比如序列节点临时节点。序列节点会在节点路径后面自动添加一个序列号,以避免节点名称重复,而临时节点会在与Zookeeper服务断开连接后自动删除。 总之,节点Zookeeper中最基本的数据单元,可以创建、删除和更新节点的数据,这些操作可以帮助我们维护分布式应用中的共享状态和集群管理基础设施。同时,高级特性如序列节点临时节点也为我们提供了更多灵活性和便利性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

常识的Blog

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值