这是kazoo readthedocs上提到的代码
election=zk.Election("/electionpath", "my-identifier")
要将特定节点作为领导者传递的输入参数是什么? (即/ electionpath和my-identifier在这里指的是什么?)
答案 0 :(得分:5)
简而言之:" /选举路径"是您感兴趣的路径,您将使用dataWatchers创建节点,添加数据和观察节点。 "我的标识符"是非重入锁定的标识符,用于验证谁是竞争者中的领导者,并且只允许向领导者写入。
详细信息: 为了简化它,首先解释为什么在zookeeper中应该有领导者。它是执行所有写操作和连接相关处理的领导者。 考虑以下示例来理解领导者选举的概念。
在[1]中:zk_client.create(' test_zk / path_of_interest / test_ephemeral', 短暂= TRUE)
在[9]中:zk_client.get(" test_zk / path_of_interest / test_ephemeral")
Out [9] :('',ZnodeStat(czxid = 678608988239,mzxid = 687195015354, ctime = 1476960597584,mtime = 1477310417594,版本= 1145,cversion = 0, aversion = 0,ephemeralOwner = 0,dataLength = 185,numChildren = 0, pzxid = 678608988239))
创建ID最小的节点(czxid)将被选为领导职位领导选举流程。
内部领导者选举给予选举节点(最小的czxid)一个非重入锁定,并为该锁定设置一些标识符,用于验证谁是竞争者中的领导者(你的"我的标识符"。)
现在让我们看一下选举领导者的实际代码。
In [7]: election = zk_client.Election('/test_zk/path_of_interest', 'test-election')
In [8]: def leader_func():
...: print 'Election Completed...!'
...:
In [9]: election.run(leader_func)
Election Completed...!
将一个callable传递给run方法来做一些选举后的事情。
我希望这会有所帮助。