首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ZooKeeper -一个或多个客户与ZooKeeper失去连接后的客户协调

ZooKeeper -一个或多个客户与ZooKeeper失去连接后的客户协调
EN

Stack Overflow用户
提问于 2015-07-23 06:54:59
回答 2查看 437关注 0票数 2

我有两个进程在各自的JVM中运行(例如节点A和B)。它们连接到单个ZooKeeper服务器,以协调任务执行。任何一个节点(A或B)都应该一次执行一个scheduled task (freq 1 minute),而不是同时执行。此外,如果A失败,则B应接管,在下一个预定时间执行任务。

以下是问题

节点A赢得竞争,并在ZooKeeper上创建一些临时节点,以指示它已经开始执行task.Once A,它开始执行任务,它失去了与ZooKeeper的连接,因此ZooKeeper在一段时间后删除了该临时节点。由于意外的大数据量,执行超过了1分钟的边界。现在,当B醒来时,它将不会看到A先前创建的任何临时节点。在没有该节点的情况下,B认为没有其他节点正在执行任务,并且它也开始并行执行任务,这是错误的。A或B都应该运行这个任务。

我更喜欢A完成已启动的任务,即使它没有连接到ZooKeeper和B,在A完成任务之前也不会并行运行。

我正在使用org.I0Itec.zkclient.ZkClient客户端库。除了自定义的heartbeat机制之外,还有其他解决方案吗?

EN

回答 2

Stack Overflow用户

发布于 2015-07-26 00:01:33

另一个解决方案是有一个目录,其中包含正在执行的所有当前任务。当节点A完成执行任务T时,节点B已经开始执行任务T。现在,您可以做的是尝试杀死节点B并提交节点A产生的所有更改。这是推测执行原则的一个变化。如果节点A成功地执行了任务,则可以关闭节点B或放弃该节点所做的所有更改。

票数 1
EN

Stack Overflow用户

发布于 2015-07-23 20:28:22

如果设置了更高的会话超时,则B创建的临时节点不会被删除,B也不会执行任务。

确切地说,

  • 如果您知道线程执行任务所需的最大时间,请将最大时间设置为会话超时。
  • 否则,则根据平均执行时间、p-90或其他启发式来确定超时。
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31580177

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档