新闻详情

新闻详情

首页 / 资讯中心 / 详情

Zookeeper原理与应用场景-CSDN博客

发布时间:2026/9/26 1:19:46来源:尧图网络
Zookeeper原理与应用场景-CSDN博客
首屏导读 · 本教程配套付费专栏 大模型工程师修炼手记19.9 元AI 编程 / Agent 实战 本文同主题系统课程· AI时代程序员的自我提升49.9 元AI 时代成长方法论。单篇不过瘾订阅解锁全量源码、实战与答疑文末附资料包领取方式 ↓一直对zookeeper的应用和原理比较迷糊今天看一篇文章讲得很通透分享如下场景一有这样一个场景系统中有大约100w的用户每个用户平 均有3个邮箱账号每隔5分钟每个邮箱账需要收取100封邮件最多3亿份邮件需要下载到服务器中(不含附件和正文)。用20台机器划分计算的压力从 多个不同的网路出口进行访问外网计算的压力得到缓解那么每台机器的计算压力也不会很大了。通过我们的讨论和以往的经验判断在这场景中可以实现并行计算但我们还期望能对并行计算的节点进行动态的添加/删除做到在线更新并行计算的数目并且不会影响计算单元中的其他计算节点但是有4个问题需要解决否则会出现一些严重的问题20台机器同时工作时有一台机器down掉了其他机器怎么进行接管计算任务否则有些用户的业务不会被处理造成用户服务终断。随着用户数量增加添加机器是可以解决计算的瓶颈但需要重启所有计算节点如果需要那么将会造成整个系统的不可用。用户数量增加或者减少计算节点中的机器会出现有的机器资源使用率繁忙有的却空闲因为计算节点不知道彼此的运行负载状态。怎么去通知每个节点彼此的负载状态怎么保证通知每个计算节点方式的可靠性和实时性。先不说那么多专业名词白话来说我们需要的是1记录状态2事件通知 3可靠稳定的中央调度器4易上手、管理简单。采用Zookeeper完全可以解决我们的问题分布式计算中的协调员观察者分布式锁 都可以作为zookeeper的关键词在系统中利用Zookeeper来处理事件通知,队列,优先队列,锁,共享锁等功能利用这些特色在分布式计算中发挥重要的作用。场景二假设我们我们有个20个搜索引擎的服务器(每个负责总索引中的一部分的搜索任务)和一个总服务器(负责向这20个搜索引擎的服务器发出搜索请求并合并 结果集),一个备用的总服务器(负责当总服务器宕机时替换总服务器),一个web的 cgi(向总服务器发出搜索请求).搜索引擎的服务器中的15个服务器现在提供搜索服务,5个服务器正在生成索引.这20个搜索引擎的服务器经常要让正在 提供搜索服务的服务器停止提供服务开始生成索引,或生成索引的服务器已经把索引生成完成可以搜索提供服务了.使用Zookeeper可以保证总服务器自动 感知有多少提供搜索引擎的服务器并向这些服务器发出搜索请求,备用的总服务器宕机时自动启用备用的总服务器,web的cgi能够自动地获知总服务器的网络 地址变化.这些又如何做到呢?提供搜索引擎的服务器都在Zookeeper中创建znode,zk.create(“/search/nodes/node1”,“hostname”.getBytes(), Ids.OPEN_ACL_UNSAFE, CreateFlags.EPHEMERAL);2.总服务器可以从Zookeeper中获取一个znode的子节点的列表,zk.getChildren(“/search/nodes”, true);3.总服务器遍历这些子节点,并获取子节点的数据生成提供搜索引擎的服务器列表.4.当总服务器接收到子节点改变的事件信息,重新返回第二步.5.总服务器在Zookeeper中创建节点,zk.create(“/search/master”, “hostname”.getBytes(), Ids.OPEN_ACL_UNSAFE, CreateFlags.EPHEMERAL);6.备用的总服务器监控Zookeeper中的”/search/master”节点.当这个znode的节点数据改变时,把自己启动变成总服务器,并把自己的网络地址数据放进这个节点.7.web的cgi从Zookeeper中”/search/master”节点获取总服务器的网络地址数据并向其发送搜索请求.8.web的cgi监控Zookeeper中的”/search/master”节点,当这个znode的节点数据改变时,从这个节点获取总服务器的网络地址数据,并改变当前的总服务器的网络地址.在我的测试中:一个Zookeeper的集群中,3个Zookeeper节点.一个leader,两个follower的情况下,停掉leader,然后两个follower选举出一个leader.获取的数据不变.我想Zookeeper能够帮助Hadoop做到: Hadoop,使用Zookeeper的事件处理确保整个集群只有一个NameNode,存储配置信息等. HBase,使用Zookeeper的事件处理确保整个集群只有一个HMaster,察觉HRegionServer联机和宕机,存储访问控制列表等.zookeeper是什么官方说辞Zookeeper 分布式服务框架是Apache Hadoop 的一个子项目它主要是用来解决分布式应用中经常遇到的一些数据管理问题如统一命名服务、状态同步服务、集群管理、分布式应用配置项的管理等。好抽象我们改变一下方式先看看它都提供了哪些功能然后再看看使用它的这些功能能做点什么。zookeeper提供了什么简单的说zookeeper文件系统通知机制。1、 文件系统Zookeeper维护一个类似文件系统的数据结构zookeeper简介 每个子目录项如 NameService 都被称作为 znode和文件系统一样我们能够自由的增加、删除znode在一个znode下增加、删除子znode唯一的不同在于znode是可以存储数据的。有四种类型的znode1、PERSISTENT-持久化目录节点客户端与zookeeper断开连接后该节点依旧存在2、 PERSISTENT_SEQUENTIAL-持久化顺序编号目录节点客户端与zookeeper断开连接后该节点依旧存在只是Zookeeper给该节点名称进行顺序编号3、EPHEMERAL-临时目录节点客户端与zookeeper断开连接后该节点被删除4、EPHEMERAL_SEQUENTIAL-临时顺序编号目录节点客户端与zookeeper断开连接后该节点被删除只是Zookeeper给该节点名称进行顺序编号2、 通知机制客户端注册监听它关心的目录节点当目录节点发生变化数据改变、被删除、子目录节点增加删除时zookeeper会通知客户端。就这么简单下面我们看看能做点什么呢我们能用zookeeper做什么1、 命名服务这个似乎最简单在zookeeper的文件系统里创建一个目录即有唯一的path。在我们使用tborg无法确定上游程序的部署机器时即可与下游程序约定好path通过path即能互相探索发现不见不散了。2、 配置管理程序总是需要配置的如果程序分散部署在多台机器上要逐个改变配置就变得困难。好吧现在把这些配置全部放到zookeeper上去保存在 Zookeeper 的某个目录节点中然后所有相关应用程序对这个目录节点进行监听一旦配置信息发生变化每个应用程序就会收到 Zookeeper 的通知然后从 Zookeeper 获取新的配置信息应用到系统中就好。zookeeper简介3、 集群管理所谓集群管理无在乎两点是否有机器退出和加入、选举master。对于第一点所有机器约定在父目录GroupMembers下创建临时目录节点然后监听父目录节点的子节点变化消息。一旦有机器挂掉该机器与 zookeeper的连接断开其所创建的临时目录节点被删除所有其他机器都收到通知某个兄弟目录被删除于是所有人都知道它上船了。新机器加入 也是类似所有机器收到通知新兄弟目录加入highcount又有了。 对于第二点我们稍微改变一下所有机器创建临时顺序编号目录节点每次选取编号最小的机器作为master就好。 zookeeper简介4、 分布式锁有了zookeeper的一致性文件系统锁的问题变得容易。锁服务可以分为两类一个是保持独占另一个是控制时序。 对于第一类我们将zookeeper上的一个znode看作是一把锁通过createznode的方式来实现。所有客户端都去创建 /distribute_lock 节点最终成功创建的那个客户端也即拥有了这把锁。厕所有言来也冲冲去也冲冲用完删除掉自己创建的distribute_lock 节点就释放出锁。 对于第二类 /distribute_lock 已经预先存在所有客户端在它下面创建临时顺序编号目录节点和选master一样编号最小的获得锁用完删除依次方便。 zookeeper简介5、队列管理两种类型的队列1、 同步队列当一个队列的成员都聚齐时这个队列才可用否则一直等待所有成员到达。2、队列按照 FIFO 方式进行入队和出队操作。第一类在约定目录下创建临时目录节点监听节点数目是否是我们要求的数目。第二类和分布式锁服务中的控制时序场景基本原理一致入列有编号出列按编号。终于了解完我们能用zookeeper做什么了可是作为一个程序员我们总是想狂热了解zookeeper是如何做到这一点的单点维护一个文件系统没有什么难度可是如果是一个集群维护一个文件系统保持数据的一致性就非常困难了。分布式与数据复制Zookeeper作为一个集群提供一致的数据服务自然它要在所有机器间做数据复制。数据复制的好处1、 容错一个节点出错不致于让整个系统停止工作别的节点可以接管它的工作2、提高系统的扩展能力把负载分布到多个节点上或者增加节点来提高系统的负载能力3、提高性能让客户端本地访问就近的节点提高用户访问速度。从客户端读写访问的透明度来看数据复制集群系统分下面两种1、写主(WriteMaster)对数据的修改提交给指定的节点。读无此限制可以读取任何一个节点。这种情况下客户端需要对读与写进行区别俗称读写分离2、写任意(Write Any)对数据的修改可提交给任意的节点跟读一样。这种情况下客户端对集群节点的角色与变化透明。对zookeeper来说它采用的方式是写任意。通过增加机器它的读吞吐能力和响应能力扩展性非常好而写随着机器的增多吞吐能力肯定下降这 也是它建立observer的原因而响应能力则取决于具体实现方式是延迟复制保持最终一致性还是立即复制快速响应。我们关注的重点还是在如何保证数据在集群所有机器的一致性这就涉及到paxos算法。数据一致性与paxos算法据说Paxos算法的难理解与算法的知名度一样令人敬仰所以我们先看如何保持数据的一致性这里有个原则就是在一个分布式数据库系统中如果各节点的初始状态一致每个节点都执行相同的操作序列那么他们最后能得到一个一致的状态。Paxos算法解决的什么问题呢解决的就是保证每个节点执行相同的操作序列。好吧这还不简单master维护一个全局写队列所有写操作都必须 放入这个队列编号那么无论我们写多少个节点只要写操作是按编号来的就能保证一致性。没错就是这样可是如果master挂了呢。 Paxos算法通过投票来对写操作进行全局编号同一时刻只有一个写操作被批准同时并发的写操作要去争取选票只有获得过半数选票的写操作才会被 批准所以永远只会有一个写操作得到批准其他的写操作竞争失败只好再发起一轮投票就这样在日复一日年复一年的投票中所有写操作都被严格编号排 序。编号严格递增当一个节点接受了一个编号为100的写操作之后又接受到编号为99的写操作因为网络延迟等很多不可预见原因它马上能意识到自己 数据不一致了自动停止对外服务并重启同步过程。任何一个节点挂掉都不会影响整个集群的数据一致性总2n1台除非挂掉大于n台。总结Zookeeper 作为 Hadoop 项目中的一个子项目是 Hadoop 集群管理的一个必不可少的模块它主要用来控制集群中的数据如它管理 Hadoop 集群中的 NameNode还有 Hbase 中 Master Election、Server 之间状态同步等。Zookeeper工作原理ZooKeeper是一个分布式的开放源码的分布式应用程序协调服务它包含一个简单的原语集分布式应用程序可以基于它实现同步服务配置维护和 命名服务等。Zookeeper是hadoop的一个子项目其发展历程无需赘述。在分布式应用中由于工程师不能很好地使用锁机制以及基于消息的协调 机制不适合在某些应用中使用因此需要有一种可靠的、可扩展的、分布式的、可配置的协调机制来统一系统的状态。Zookeeper的目的就在于此。本文简 单分析zookeeper的工作原理对于如何使用zookeeper不是本文讨论的重点。Zookeeper的基本概念1.1 角色Zookeeper中的角色主要有以下三类如下表所示zookeeper简介系统模型如图所示zookeeper简介1.2 设计目的1.最终一致性client不论连接到哪个Server展示给它都是同一个视图这是zookeeper最重要的性能。2 .可靠性具有简单、健壮、良好的性能如果消息m被到一台服务器接受那么它将被所有的服务器接受。3 .实时性Zookeeper保证客户端将在一个时间间隔范围内获得服务器的更新信息或者服务器失效的信息。但由于网络延时等原因Zookeeper不能保证两个客户端能同时得到刚更新的数据如果需要最新数据应该在读数据之前调用sync()接口。4 .等待无关wait-free慢的或者失效的client不得干预快速的client的请求使得每个client都能有效的等待。5.原子性更新只能成功或者失败没有中间状态。6 .顺序性包括全局有序和偏序两种全局有序是指如果在一台服务器上消息a在消息b前发布则在所有Server上消息a都将在消息b前被发布偏序是指如果一个消息b在消息a后被同一个发送者发布a必将排在b前面。ZooKeeper的工作原理Zookeeper的核心是原子广播这个机制保证了各个Server之间的同步。实现这个机制的协议叫做Zab协议。Zab协议有两种模式它们分 别是恢复模式选主和广播模式同步。当服务启动或者在领导者崩溃后Zab就进入了恢复模式当领导者被选举出来且大多数Server完成了和 leader的状态同步以后恢复模式就结束了。状态同步保证了leader和Server具有相同的系统状态。为了保证事务的顺序一致性zookeeper采用了递增的事务id号zxid来标识事务。所有的提议proposal都在被提出的时候加上 了zxid。实现中zxid是一个64位的数字它高32位是epoch用来标识leader关系是否改变每次一个leader被选出来它都会有一个 新的epoch标识当前属于那个leader的统治时期。低32位用于递增计数。每个Server在工作过程中有三种状态LOOKING当前Server不知道leader是谁正在搜寻LEADING当前Server即为选举出来的leaderFOLLOWINGleader已经选举出来当前Server与之同步2.1 选主流程当leader崩溃或者leader失去大多数的follower这时候zk进入恢复模式恢复模式需要重新选举出一个新的leader让所有的 Server都恢复到一个正确的状态。Zk的选举算法有两种一种是基于basic paxos实现的另外一种是基于fast paxos算法实现的。系统默认的选举算法为fast paxos。先介绍basic paxos流程1 .选举线程由当前Server发起选举的线程担任其主要功能是对投票结果进行统计并选出推荐的Server 2 .选举线程首先向所有Server发起一次询问(包括自己) 3 .选举线程收到回复后验证是否是自己发起的询问(验证zxid是否一致)然后获取对方的id(myid)并存储到当前询问对象列表中最后获取对方提议的leader相关信息( id,zxid)并将这些信息存储到当次选举的投票记录表中 4. 收到所有Server回复以后就计算出zxid最大的那个Server并将这个Server相关信息设置成下一次要投票的Server 5. 线程将当前zxid最大的Server设置为当前Server要推荐的Leader如果此时获胜的Server获得n/2 1的Server票数 设置当前推荐的leader为获胜的Server将根据获胜的Server相关信息设置自己的状态否则继续这个过程直到leader被选举出来。 通过流程分析我们可以得出要使Leader获得多数Server的支持则Server总数必须是奇数2n1且存活的Server的数目不得少于n1. 每个Server启动后都会重复以上流程。在恢复模式下如果是刚从崩溃状态恢复的或者刚启动的server还会从磁盘快照中恢复数据和会话信息zk会记录事务日志并定期进行快照方便在恢复时进行状态恢复。选主的具体流程图如下所示 zookeeper简介 fast paxos流程是在选举过程中某Server首先向所有Server提议自己要成为leader当其它Server收到提议以后解决epoch和 zxid的冲突并接受对方的提议然后向对方发送接受提议完成的消息重复这个流程最后一定能选举出Leader。其流程图如下所示 zookeeper简介2.2 同步流程选完leader以后zk就进入状态同步过程。1. leader等待server连接 2 .Follower连接leader将最大的zxid发送给leader 3 .Leader根据follower的zxid确定同步点 4 .完成同步后通知follower 已经成为uptodate状态 5 .Follower收到uptodate消息后又可以重新接受client的请求进行服务了。流程图如下所示zookeeper简介2.3 工作流程2.3.1 Leader工作流程Leader主要有三个功能1 .恢复数据 2 .维持与Learner的心跳接收Learner请求并判断Learner的请求消息类型 3 .Learner的消息类型主要有PING消息、REQUEST消息、ACK消息、REVALIDATE消息根据不同的消息类型进行不同的处理。 PING消息是指Learner的心跳信息REQUEST消息是Follower发送的提议信息包括写请求及同步请求ACK消息是 Follower的对提议的回复超过半数的Follower通过则commit该提议REVALIDATE消息是用来延长SESSION有效时间。Leader的工作流程简图如下所示在实际实现中流程要比下图复杂得多启动了三个线程来实现功能。zookeeper简介2.3.2 Follower工作流程Follower主要有四个功能1. 向Leader发送请求PING消息、REQUEST消息、ACK消息、REVALIDATE消息 2 .接收Leader消息并进行处理 3 .接收Client的请求如果为写请求发送给Leader进行投票 4 .返回Client结果。Follower的消息循环处理如下几种来自Leader的消息1 .PING消息 心跳消息 2 .PROPOSAL消息Leader发起的提案要求Follower投票 3 .COMMIT消息服务器端最新一次提案的信息 4 .UPTODATE消息表明同步完成 5 .REVALIDATE消息根据Leader的REVALIDATE结果关闭待revalidate的session还是允许其接受消息 6 .SYNC消息返回SYNC结果到客户端这个消息最初由客户端发起用来强制得到最新的更新。Follower的工作流程简图如下所示在实际实现中Follower是通过5个线程来实现功能的。zookeeper简介对于observer的流程不再叙述observer流程和Follower的唯一不同的地方就是observer不会参加leader发起的投票。附录ZooKeeper典型使用场景一览ZooKeeper是一个高可用的分布式数据管理与系统协调框架。基于对Paxos算法的实现使该框架保证了分布式环境中数据的强一致性也正是基 于这样的特性使得zookeeper能够应用于很多场景。网上对zk的使用场景也有不少介绍本文将结合作者身边的项目例子系统的对zk的使用场景进 行归类介绍。 值得注意的是zk并不是生来就为这些场景设计都是后来众多开发者根据框架的特性摸索出来的典型使用方法。因此也非常欢迎你分享你在ZK使用上的奇 技淫巧。场景类别典型场景描述ZK特性使用方法应用中的具体使用数据发布与订阅发布与订阅即所谓的配置管理顾名思义就是将数据发布到zk节点上供订阅者动态获取数据实现配置信息的集中式管理和动态更新。例如全局的配置信息地址列表等就非常适合使用。索引信息和集群中机器节点状态存放在zk的一些指定节点供各个客户端订阅使用。2. 系统日志经过处理后的存储这些日志通常2-3天后被清除。应用中用到的一些配置信息集中管理在应用启动的时候主动来获取一次并且在节点上注册一个Watcher以后每次配置有更新实时通知到应用获取最新配置信息。业务逻辑中需要用到的一些全局变量比如一些消息中间件的消息队列通常有个offset这个offset存放在zk上这样集群中每个发送者都能知道当前的发送进度。系统中有些信息需要动态获取并且还会存在人工手动去修改这个信息。以前通常是暴露出接口例如JMX接口有了zk后只要将这些信息存放到zk节点上即可。Name Service这个主要是作为分布式命名服务通过调用zk的create node api能够很容易创建一个全局唯一的path这个path就可以作为一个名称。分布通知/协调ZooKeeper 中特有watcher注册与异步通知机制能够很好的实现分布式环境下不同系统之间的通知与协调实现对数据变更的实时处理。使用方法通常是不同系统都对 ZK上同一个znode进行注册监听znode的变化包括znode本身内容及子节点的其中一个系统update了znode那么另一个系统能 够收到通知并作出相应处理。另一种心跳检测机制检测系统和被检测系统之间并不直接关联起来而是通过zk上某个节点关联大大减少系统耦合。2. 另一种系统调度模式某系统有控制台和推送系统两部分组成控制台的职责是控制推送系统进行相应的推送工作。管理人员在控制台作的一些操作实际上是修改 了ZK上某些节点的状态而zk就把这些变化通知给他们注册Watcher的客户端即推送系统于是作出相应的推送任务。另一种工作汇报模式一些类似于任务分发系统子任务启动后到zk来注册一个临时节点并且定时将自己的进度进行汇报将进度写回这个临时节点这样任务管理者就能够实时知道任务进度。总之使用zookeeper来进行分布式通知和协调能够大大降低系统之间的耦合。分布式锁分布式锁这个主要得益于ZooKeeper为我们保证了数据的强一致性即用户只要完全相信每时每刻zk集群中任意节点一个zk server上的相同znode的数据是一定是相同的。锁服务可以分为两类一个是保持独占另一个是控制时序。所 谓保持独占就是所有试图来获取这个锁的客户端最终只有一个可以成功获得这把锁。通常的做法是把zk上的一个znode看作是一把锁通过create znode的方式来实现。所有客户端都去创建 /distribute_lock 节点最终成功创建的那个客户端也即拥有了这把锁。控 制时序就是所有视图来获取这个锁的客户端最终都是会被安排执行只是有个全局时序了。做法和上面基本类似只是这里 /distribute_lock 已经预先存在客户端在它下面创建临时有序节点这个可以通过节点的属性控制CreateMode.EPHEMERAL_SEQUENTIAL来指 定。Zk的父节点/distribute_lock维持一份sequence,保证子节点创建的时序性从而也形成了每个客户端的全局时序。集群管理集群机器监 控这通常用于那种对集群中机器状态机器在线率有较高要求的场景能够快速对集群中机器变化作出响应。这样的场景中往往有一个监控系统实时检测集群 机器是否存活。过去的做法通常是监控系统通过某种手段比如ping定时检测每个机器或者每个机器自己定时向监控系统汇报“我还活着”。 这种做法可行但是存在两个比较明显的问题1. 集群中机器有变动的时候牵连修改的东西比较多。2. 有一定的延时。利 用ZooKeeper有两个特性就可以实时另一种集群机器存活性监控系统a. 客户端在节点 x 上注册一个Watcher那么如果 x 的子节点变化了会通知该客户端。b. 创建EPHEMERAL类型的节点一旦客户端和服务器的会话结束或过期那么该节点就会消失。例 如监控系统在 /clusterServers 节点上注册一个Watcher以后每动态加机器那么就往 /clusterServers 下创建一个 EPHEMERAL类型的节点/clusterServers/{hostname}. 这样监控系统就能够实时知道机器的增减情况至于后续处理就是监控系统的业务了。2. Master选举则是zookeeper中最为经典的使用场景了。在 分布式环境中相同的业务应用分布在不同的机器上有些业务逻辑例如一些耗时的计算网络I/O处理往往只需要让整个集群中的某一台机器进行执行 其余机器可以共享这个结果这样可以大大减少重复劳动提高性能于是这个master选举便是这种场景下的碰到的主要问题。利用ZooKeeper的强一致性能够保证在分布式高并发情况下节点创建的全局唯一性即同时有多个客户端请求创建 /currentMaster 节点最终一定只有一个客户端请求能够创建成功。利用这个特性就能很轻易的在分布式环境中进行集群选取了。另外这种场景演化一下就是动态Master选举。这就要用到 EPHEMERAL_SEQUENTIAL类型节点的特性了。上 文中提到所有客户端创建请求最终只有一个能够创建成功。在这里稍微变化下就是允许所有请求都能够创建成功但是得有个创建顺序于是所有的请求最终 在ZK上创建结果的一种可能情况是这样 /currentMaster/{sessionId}-1 , /currentMaster/{sessionId}-2 , /currentMaster/{sessionId}-3 ….. 每次选取序列号最小的那个机器作为Master如果这个机器挂了由于他创建的节点会马上小时那么之后最小的那个机器就是Master了。在搜索系统中如果集群中每个机器都生成一份全量索引不仅耗时而且不能保证彼此之间索引数据一致。因此让集群中的Master来进行全量索引的生成 然后同步到集群中其它机器。2. 另外Master选举的容灾措施是可以随时进行手动指定master就是说应用在zk在无法获取master信息时可以通过比如http方式向 一个地方获取master。分布式队列队列方面我目前感觉有两种一种是常规的先进先出队列另一种是要等到队列成员聚齐之后的才统一按序执行。对于第二种先进先出队列和分布式锁服务中的控制时序场景基本原理一致这里不再赘述。第 二种队列其实是在FIFO队列的基础上作了一个增强。通常可以在 /queue 这个znode下预先建立一个/queue/num 节点并且赋值为n或者直接给/queue赋值n表示队列大小之后每次有队列成员加入后就判断下是否已经到达队列大小决定是否可以开始执行 了。这种用法的典型场景是分布式环境中一个大任务Task A需要在很多子任务完成或条件就绪情况下才能进行。这个时候凡是其中一个子任务完成就绪那么就去 /taskList 下建立自己的临时时序节点CreateMode.EPHEMERAL_SEQUENTIAL当 /taskList 发现自己下面的子节点满足指定个数就可以进行下一步按序进行处理了。参考http://zookeeper.apache.org/ http://blog.csdn.net/cutesource/article/details/5822459 http://blog.csdn.net/pwlazy/article/details/8080626 http://nileader.blog.51cto.com/1381108/795265 http://nileader.blog.51cto.com/1381108/926753 http://nileader.blog.51cto.com/1381108/795230 http://netcome.iteye.com/blog/1474255hrefhttps://csdnimg.cn/release/blogv2/dist/mdeditor/css/editerView/markdown_views-e1cc28b339.css relstylesheet hrefhttps://csdnimg.cn/release/blogv2/dist/mdeditor/css/style-d1e89cace4.css relstylesheet内容来源csdn.net作者昵称Tom·Ge原文链接https://blog.csdn.net/gedonshen/article/details/78978169作者主页https://blog.csdn.net/gedonshen标签#大数据确定要放弃本次机会福利倒计时::立减 ¥普通VIP年卡可用立即使用延伸阅读 · 我的付费专栏觉得这篇文章对你有帮助我把同类主题的系统化内容沉淀成了付费专栏欢迎订阅支持持续输出专栏定价内容大模型工程师修炼手记19.9 元AI 编程 / Agent 深度实战AI时代程序员的自我提升49.9 元AI 时代成长方法论本文配套代码 / 资料包欢迎在评论区留言「求代码」我会私信发送完整资源
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

OpenShell Go SDK 凭据刷新(Provider Credential Refresh)实战:自动化 API 密钥轮换与状态监控 2026/9/26 2:01:26

OpenShell Go SDK 凭据刷新(Provider Credential Refresh)实战:自动化 API 密钥轮换与状态监控

【免费下载链接】OpenShell OpenShell is the safe, private runtime for autonomous AI agents. 项目地址: https://gitcode.com/gh_mirrors/op/OpenShell 点击查看 免费下载 导读:本文围绕 OpenShell Go SDK 中 client.Providers().Refresh() 提供的凭…

阅读更多 →
NodeGui WidgetAttribute 枚举全解析:用 setAttribute 精细控制 Qt 控件行为 2026/9/26 2:01:26

NodeGui WidgetAttribute 枚举全解析:用 setAttribute 精细控制 Qt 控件行为

桌面应用跨平台 【免费下载链接】nodegui A library for building cross-platform native desktop applications with Node.js and CSS 🚀. React NodeGui : https://react.nodegui.org and Vue NodeGui: https://vue.nodegui.org 项目地址: https://git…

阅读更多 →
rrdtool 1.4.7源码编译安装与监控命令实战指南 2026/9/26 2:01:19

rrdtool 1.4.7源码编译安装与监控命令实战指南

简介:rrdtool-1.4.7.tar.gz 是 RRDTool 1.4.7 稳定版源码包,面向运维工程师、监控系统二次开发者和网络管理人员,可与 Smokeping、Cacti、MRTG 等监控工具配合,解决性能数据采集、时序存储与趋势展示问题。包体压缩后约 1.29MB&am…

阅读更多 →
Redis Desktop Manager 0.8.8.384 免费版安装配置与避坑指南 2026/9/26 2:01:13

Redis Desktop Manager 0.8.8.384 免费版安装配置与避坑指南

1. 为什么 0.8.8 这个老版本至今还有人专门找Redis Desktop Manager 这个工具,做后端开发、运维、测试的朋友应该都不陌生。它本质上就是一个 Redis 的可视化客户端,让你不用整天对着命令行敲keys *、hgetall,而是像用 Navicat 看 MySQL 一样…

阅读更多 →
PotPlayer播放TrueHD无声?从分离器到渲染器的完整排查指南 2026/9/26 2:01:13

PotPlayer播放TrueHD无声?从分离器到渲染器的完整排查指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
Open Code Review:可审计、可验证的开源代码审查范式 2026/9/26 2:01:13

Open Code Review:可审计、可验证的开源代码审查范式

1. 这不是又一个“AI代码审查工具”,而是一套可审计、可验证、可嵌入CI的开源协作范式 你有没有遇到过这样的场景:团队里新来一位 junior 开发者,提交了一段看似逻辑通顺的 Python 脚本——它能跑通单元测试,也能在本地环境输出预…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉