问题标签 [apache-curator]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
623 浏览

apache - 策展人在后台是什么意思?

策展人的背景

在后台运行是什么意思?它是否在不同的线程中运行?JavaDoc 什么也没说。我不确定:(

0 投票
2 回答
3177 浏览

locking - Apache Zookeeper / Curator 锁上的生存时间

Apache Curator 锁配方(或较低级别的 ZooKeeper)中是否有任何工具用于自动释放已超过某些 TTL 的锁?如果没有,是否有处理该问题的最佳实践?我看到 Curator 在客户端连接丢失的情况下会自动释放锁,这很好……而且锁获取超时也很有帮助。

我想知道我需要在多大程度上保护我的系统,方法是通过重复工作来查找已经存在很长时间的锁并手动释放它们。我会通过让我的单独进程直接删除相关的 ZNode 来做到这一点吗?

0 投票
2 回答
94 浏览

java - 创建运行无误的 Java 程序

我是 Zookeeper 的新手,Apache 馆长,需要你的帮助来设计一个程序:

我需要创建一个 java 程序,它将每小时运行一个脚本(基于最终用户提供的 cron 表达式)。
考虑到我有 3 台服务器,我需要确保脚本每小时运行一次而不会出现故障,即使在服务器关闭的情况下(在这种情况下脚本必须在其他服务器上运行)。每小时脚本将仅在一台服务器上运行。
我必须创建一个接口来提供这个 java 程序的输入。
输入将是 (i) 要运行的脚本和 (ii) 计划脚本的 Cron 表达式。

1)请提出一个想法,我该如何设计我的程序来实现这一目标。zookeeper 和 Apache curator 怎么能一样用。
2) 有没有办法在最终用户提供运行的这 3 台服务器上缓存脚本?

可以使用 Apache curator 的 NodeCache 来缓存这 3 台服务器上的脚本吗?您的回复将不胜感激。

0 投票
2 回答
1699 浏览

apache-zookeeper - Zookeeper 监视错过的事件

在 Zookeeper 中,我们如何处理从前一个手表的回调和重置新手表之间的“丢失数据更改”事件。我正在尝试查看许多可用的解决方案,例如 Apache curator 和互联网上的其他建议。但我仍然不清楚。

我们如何确保我们不会错过任何事件,或者是否有任何其他万无一失的方法来确保我们不会错过 zookeeper 中的任何状态更改(尤其是节点数据更改)?我知道定期投票是一种方式。但这很昂贵。

0 投票
1 回答
1114 浏览

spring - Spring-XD Curator 连接超时

在 Spring-XD 中,Curator Connection 超时:

WARN ConnectionStateManager-0 curator.ConnectionState - 在 63021 之后连接尝试不成功(大于 60000 的最大超时)。重置连接并使用新连接重试。

Curator 尝试重新建立连接,但失败了。请检查下面的日志。有没有人遇到过类似的问题?如果您知道解决问题的任何方法或知道任何解决方法,请告诉我。

另外默认的 Curator 连接超时是 60000。有没有办法增加它?spring-xd 是否公开可以设置的属性?

0 投票
1 回答
1731 浏览

apache-zookeeper - 如何以编程方式检测集成客户端中连接到哪个服务器?

如何以编程方式检测客户端连接到 ZooKeeper 集成中的哪个服务器?

我正在使用Apache Curator API,并通过注册ConnectionStateListener来监听连接状态的变化。如果客户端连接的服务器出现故障,我想知道当客户端重新连接时客户端连接到集合中的哪个服务器。

0 投票
3 回答
4233 浏览

apache-zookeeper - Curator 中的超时配置

我创建了一个 Curator 客户端,如下所示:

在运行我的客户端程序时,我通过关闭 Curator 用来与 Zookeeper 通信的 NIC 来模拟网络分区。根据我看到的行为,我有几个问题:

  1. ConnectionStateManager - State change: SUSPENDED我在 10 秒后看到一条消息。直到 Curator 进入 SUSPENDED 状态的时间量是可配置的,基于其他超时值的百分比,还是总是 10 秒?
  2. 自上次成功的检测信号后,配置的 15 秒会话超时后,我没有收到任何通知。确实在日志中看到了一条ZooKeeper - Session: 0x14adf3f01ef0001 closed消息,但这似乎并没有作为我可以捕获或侦听的事件来传播。我在这里错过了什么吗?
  3. ConnectionStateManager - State change: LOST我最终在连接丢失近两分钟后收到一条消息。为什么这么长?
  4. 如果我的目标是在 HA 场景中使用 InterProcessMutex 作为防止脑裂的手段,似乎最安全的方法是让锁持有者在SUSPENDED收到消息时假设它已经丢失了锁,因为它完全是Zookeeper 可能在网络分区的另一端释放了它不知道的锁。这是一种典型/理智的方法吗?
0 投票
4 回答
5021 浏览

java - 如何使用 Curator for Zookeeper 有效地使用 LeaderElection 配方?

我正在使用 Apache Curator 库对 Zookeeper 进行领导选举。我的应用程序代码部署在多台机器上,我只需要从一台机器上执行我的代码,这就是为什么我在 zookeeper 上进行领导选举,以便我可以检查我是否是领导者,然后执行此代码。

下面是我的LeaderElectionExecutor课程,它确保每个应用程序都有一个 Curator 实例

下面是我的ZookeeperClient代码 -

现在在我的应用程序中,我正在使用这样的代码 -

问题陈述:-

在 Curator 库中 -isLeader()启动闩锁后立即调用将不起作用。领导者被选中需要时间。仅因为这个原因,我在我的LeaderElectionExecutor代码中添加了 1 分钟的睡眠时间,它工作正常,但我想这不是正确的方法。

有没有更好的方法来做到这一点?记住这一点,我需要一种方法来检查我是否是领导者,然后执行这段代码。我不能用一个方法做所有事情,所以我需要isLeader从不同的类和方法中调用方法来检查我是否是领导者,然后只执行这段代码。

我正在使用 Zookeeper 3.4.5 和 Curator 1.7.1 版本。

0 投票
0 回答
447 浏览

java - 使用 curator 检索所有顺序创建的 znode

如果我使用 CreateMode.PERSISTENT_SEQUENTIAL 为一组 PATH 创建 zookeeper znode。

是否可以检索仅使用 PATH 创建的所有按顺序命名的 zNode?

.withMode 方法中的 CreateMode.PERSISTENT_SEQUENTIAL 选项创建一个由 PATH 引用的 zNode,并附加一个 10 位数的增量数字。该文档将 PATH 称为父路径。但我似乎无法在 PATH 本身引用的 zNode 上使用 getData 或 checkExists() 方法。换句话说,我想使用 PATH 作为父节点并使用 getChildren() 方法来获取顺序生成的节点。这可能吗?

我找到/实现了解决方案。如果我以“/”结束 PATH 变量并将 .creatingParentsIfNeeded() 添加到 create 方法链,它会创建所需的父 zNode。

0 投票
1 回答
1020 浏览

spring - Spring MVC 关闭钩子

我将 Curator 服务发现与 Spring MVC 休息控制器一起使用,其中每个控制器在 @PostConstruct 中向 ZooKeeper 注册自己,并在 @PreDestroy 中取消注册自己。

我遇到的问题是,在调用 @PreDestroy 方法时,控制器已经不再为请求提供服务。我需要在控制器停止服务请求之前取消注册控制器,以避免在控制器停止和取消注册之间发生的少量请求引发异常。

我已经尝试了 spring ApplicationListener 接口、SmartLifecycle 和 ServletContextListener,并且在所有与关闭/关闭相关的挂钩中,控制器已经停止服务请求。

我需要一个关闭挂钩,我可以在控制器停止服务请求之前取消注册,但我不确定一个是否可用。