Проблемы с тайм-аутом соединения Zookeeper

Мы используем версию кураторской платформы 2.3.0 для подключения к zookeeper в файле pom.

 <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, и время от времени мы получаем следующие ошибки. Я попробовал поискать в Google, но не смог найти точную причину проблемы и ее решение. Ищем идеи о том, как решить эту проблему.

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)

0 ответов

Возможно, вам придется настроить тайм-ауты сеанса и подключения для вашего кураторского клиента. ПроверьтеconnectionTimeoutMs а также SessionTimeoutMs настройки для вашего CuratorFramework.

Как правило, ваше connectionTimeoutMs должно быть SessionTimeoutMsделится на количество узлов Zookeeper в кластере. Если клиент не может подключиться к одному из узлов вconnectionTimeoutMs, он попытается подключиться к другому узлу до истечения времени ожидания сеанса.

Другие параметры, на которые следует обратить внимание, - это политика повторных попыток и интервал между повторными попытками (если вы используете RetryNTimes политики, стоит убедиться, что ваша sleepBetweenRetries не слишком большой, и вы получите несколько повторных попыток в течение connectionTimeoutMs интервал).

Другие вопросы по тегам