【问题标题】:Exception while trying to fetch data from zookeeper node: (KeeperErrorCode: ConnectionLoss )尝试从 zookeeper 节点获取数据时出现异常:(KeeperErrorCode:ConnectionLoss)
【发布时间】:2017-07-01 15:19:37
【问题描述】:

我正在使用以下代码从 zookeeper 中提取 Kafka 代理列表:

private static String getBrokerList() {
        try {
            ZooKeeper zookeeper = new ZooKeeper(zookeeperConnect, 15000, null);
            List<String> ids = zookeeper.getChildren(ZkUtils.BrokerIdsPath(), false);
            List<String> brokerList = new ArrayList<>();
            for (String id : ids) {
                String brokerInfo = new String(zookeeper.getData(ZkUtils.BrokerIdsPath() + '/' + id, false, null), Charset.forName("UTF-8"));
                JsonObject jsonElement = new JsonParser().parse(brokerInfo).getAsJsonObject();
                String host = jsonElement.get("host").getAsString();
                brokerList.add(host + ':' + jsonElement.get("port").toString());
            }
            return Joiner.on(",").join(brokerList);
        } catch (KeeperException | InterruptedException e) {
            Throwables.propagate(e);
        }
        return "";
    }

当一个线程一次执行代码时,上面的代码工作正常。 但是,当多个线程执行上述代码时,它偶尔会失败并出现以下异常:

Caused by: org.apache.zookeeper.KeeperException$ConnectionLossException: KeeperErrorCode = ConnectionLoss for /brokers/ids
    at org.apache.zookeeper.KeeperException.create(KeeperException.java:99)
    at org.apache.zookeeper.KeeperException.create(KeeperException.java:51)
    at org.apache.zookeeper.ZooKeeper.getChildren(ZooKeeper.java:1532)
    at org.apache.zookeeper.ZooKeeper.getChildren(ZooKeeper.java:1560)

我在这里做错了什么? 我的 zookeeper 版本是 3.4.6-1569965。

【问题讨论】:

    标签: java apache-zookeeper


    【解决方案1】:

    来自http://zookeeper.apache.org/doc/r3.4.9/api/org/apache/zookeeper/ZooKeeper.html#ZooKeeper(java.lang.String,%20int,%20org.apache.zookeeper.Watcher)

    “会话建立是异步的。此构造函数将启动与服务器的连接并立即返回 - 可能(通常)在会话完全建立之前。观察者参数指定将被通知任何状态更改的观察者。此通知可以在构造函数调用返回之前或之后的任何时间出现。”

    您必须等待 zookeeper 连接才能完全建立: https://www.tutorialspoint.com/zookeeper/zookeeper_quick_guide.htm

    向下滚动到“连接到 ZooKeeper Ensemble”的 api 部分

    【讨论】:

    • 我尝试了你给出的建议。但是它暂时解决了问题,当负载进一步增加时,我再次开始面临问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-05-09
    • 2017-03-31
    • 2023-03-14
    • 2021-09-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多