java - 频繁发生 ZooKeeper CONNECTIONLOSS 事件?

标签 java amazon-ec2 apache-zookeeper

我正在编写一个使用 ZooKeeper 的应用程序,并且经常收到 CONNECTIONLOSS 事件。我使用 2000 作为我的刻度时间,12000 作为我的 session 超时,并且应用程序在 Amazon EC2 中运行。我相信在使用之前我正在等待 ZooKeeper 连接;这是我用来执行此操作的代码:

ZooKeeper zk=new ZooKeeper(connectionString, sessionTimeout, new Watcher() {
    @SuppressWarnings("deprecation")
    public void process(WatchedEvent event) {
        switch(event.getState()) {
        case SyncConnected:
        case ConnectedReadOnly:
            // We're connected, count down...
            ready.countDown();
            break;
        case SaslAuthenticated:
            // Life is good here. Nothing to do...
            break;
        case AuthFailed:
        case Disconnected:
        case Expired:
        case NoSyncConnected:
        case Unknown:
        default:
            LOGGER.error("ZooKeeper event: "+event.getState());
            break;
        }
    }
});

boolean ok;
try {
    ok = ready.await(15, TimeUnit.SECONDS);
}
catch(InterruptedException e) {
    throw new InterruptedIOException();
}
if(ok == false)
    throw new IOException("Failed to connect to ZooKeeper");

为什么 ZooKeeper 可能会收到这些虚假的 CONNECTIONLOSS 事件?

最佳答案

我们过去在 AWS 上运行时也遇到过类似的 ZK 问题。我们通过确保所有 EC2 实例都使用网络时间协议(protocol) (NTP) 运行来解决这些问题。如果您的实例存在时间偏差,这似乎会导致它们对超时感到困惑。

关于java - 频繁发生 ZooKeeper CONNECTIONLOSS 事件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24685552/

相关文章:

java - HAL 中的 HATEOAS POST 链接

java - JSP在 session 中存储密码

java - EC2实例上的原子时间和系统时间差

linux - 如何在我的 AWS EC2 实例上安装特定字体?

ssl - 在 Apache Kafka 中禁用 TLS 1.0、TLS 1.1

java - 提示 JTextField 使其变成灰色

java - XML 字符串资源与 Java 常量字符串?

angular - ng serve 无法在 EC2 服务器上运行

docker - Zookeeper Pod无法访问已安装的持久卷声明

apache-kafka - zookeeper.connection.timeout.ms 的最大值