Я использую следующий код, чтобы извлечь Кафка список брокера из зоопарка:Исключение при попытке извлечь данные из Zookeeper узла: (KeeperErrorCode: ConnectionLoss)
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.
Я попробовал предложение, данное вами. Однако это временно решило проблему, и я снова начал сталкиваться с проблемой, когда загрузка увеличилась. –