4

我们使用 2.3.0 版本的 curator-framework 连接来连接 pom 文件中的 zookeeper。

 <dependency>
        <groupId>org.apache.curator</groupId>
        <artifactId>curator-framework</artifactId>
        <version>2.3.0</version>
    </dependency>
    <dependency>
        <groupId>org.apache.curator</groupId>
        <artifactId>curator-recipes</artifactId>
        <version>2.3.0</version>
    </dependency>

这在高负载服务器中使用,该服务器多次将数据泵入 kafka,我们时不时地收到以下错误。我尝试使用谷歌搜索,但找不到问题的确切原因和解决方案。寻找有关如何解决此问题的想法。

ERROR org.apache.curator.ConnectionState: Connection timed out for connection string (xxx.xx.xx.xx:2181, yy.yy.y.y:2181) and timeout (15000) / elapsed (37893)
org.apache.curator.CuratorConnectionLossException: KeeperErrorCode = ConnectionLoss
        at org.apache.curator.ConnectionState.checkTimeouts(ConnectionState.java:191)
        at org.apache.curator.ConnectionState.getZooKeeper(ConnectionState.java:86)
        at org.apache.curator.CuratorZookeeperClient.getZooKeeper(CuratorZookeeperClient.java:113)
        at org.apache.curator.framework.imps.CuratorFrameworkImpl.getZooKeeper(CuratorFrameworkImpl.java:456)
        at org.apache.curator.framework.imps.BackgroundSyncImpl.performBackgroundOperation(BackgroundSyncImpl.java:40)
        at org.apache.curator.framework.imps.OperationAndData.callPerformBackgroundOperation(OperationAndData.java:65)
        at org.apache.curator.framework.imps.CuratorFrameworkImpl.performBackgroundOperation(CuratorFrameworkImpl.java:672)
        at org.apache.curator.framework.imps.CuratorFrameworkImpl.backgroundOperationsLoop(CuratorFrameworkImpl.java:664)
        at org.apache.curator.framework.imps.CuratorFrameworkImpl.access$300(CuratorFrameworkImpl.java:55)
        at org.apache.curator.framework.imps.CuratorFrameworkImpl$3.call(CuratorFrameworkImpl.java:243)
        at java.util.concurrent.FutureTask.run(FutureTask.java:266)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
        at java.lang.Thread.run(Thread.java:745)
4

1 回答 1

0

您可能需要为您的 curator 客户端调整会话和连接超时。检查connectionTimeoutMsSessionTimeoutMs设置您的CuratorFramework.

根据经验,您connectionTimeoutMs应该SessionTimeoutMs除以集群中 Zookeeper 节点的数量。如果客户端无法连接到其中一个节点connectionTimeoutMs,它将尝试连接到另一个节点,直到会话超时。

其他需要注意的设置是重试策略和重试间隔(如果你使用RetryNTimes策略,值得检查你sleepBetweenRetries的不是太大并且你在connectionTimeoutMs间隔内得到了几次重试)。

于 2020-01-30T16:09:35.063 回答