重新连接到Zookeeper后如何识别添加和修改的子代?

时间:2018-09-11 19:54:15

标签: apache-zookeeper apache-curator

我们使用Zookeeper来协调集群服务器之间的任务执行。我们的一位客户的网络非常不稳定,我们的服务器不断断开连接并重新连接到Zookeeper。

问题在于,在断开连接后,我们的服务器将丢失发生的事件,即使再次重新连接到Zookeeper也不会处理这些事件。

  • 是否有推荐的\标准方法使用Zookeeper和Apache Curator处理此类情况?
  • 如何识别Zookeeper的当前时代?

到目前为止,我的建议是:

  1. 我们会跟踪上次与Zookeeper连接的时间。就是在我们断开连接之前。
  2. 再次重新连接时,我们要求侦听器访问clearAndRefresh,它会为受监控路径的所有子节点触发 CHILD_ADDED 事件。
  3. 在处理这些 CHILD_ADDED 事件时,我们仅处理了上次连接Zookeeper之后创建或修改的路径的事件。

1 个答案:

答案 0 :(得分:1)

我认为使用时间戳记不是一个好主意。相反,您可以使用Curator的内置方法:

使用哪一个无关紧要,它们都支持监听ChildAddedDataChanged事件,它们将完全满足您的需求。在断开连接后重新连接时,Curator将在内部评估新添加的子代并比较现有子代的数据以确定更改。对你没有压力。您只需要使用提供的监听器即可。

就准确性而言,TreeCache不保证100%的准确性。因此,最好重新设计使用PathChildrenCache的方法。