【问题标题】:Apache Curator Unimplemented Errors When Trying to Create zNodes尝试创建 zNode 时 Apache Curator 未实现的错误
【发布时间】:2022-03-09 09:50:19
【问题描述】:

我正在尝试将 Apache Curator 与 dockerized zookeeper 实例一起使用,无论我如何尝试连接,我总是以

org.apache.zookeeper.KeeperException$UnimplementedException: KeeperErrorCode = 未实现...

错误。我已经尝试理解文档,但我没有得到任何结果。我已登录 zookeeper CLI 并确保端口号正确:

snerd@powerglove:~$ docker ps CONTAINER ID        IMAGE               COMMAND                CREATED             STATUS              PORTS   NAMES 31f1093495ba        compose_zookeeper   "/opt/zookeeper/bin/   3 weeks ago         Up About a minute   0.0.0.0:32770->2181/tcp,
0.0.0.0:32769->2888/tcp, 0.0.0.0:32768->3888/tcp   zookeeper

这是我尝试使用的代码:

public class App {
    public static void main( String[] args ) {
        CuratorFramework client = CuratorFrameworkFactory.newClient("0.0.0.0:32770", new RetryUntilElapsed(3000, 1000));
        client.start();

            try {
                client.create().forPath("/larry-smells/foop", "tuna?".getBytes());
            } catch (Exception e) {
                System.out.println(e.toString());
            }

    }
}

据我从Curator getting started page 得知,这应该可行。我错过了什么?

编辑1 刚刚发现我能够从 zookeeper 合奏中提取数据:

System.out.println(new String(curatorFramework.getData().forPath("/larry-smells"))); 

但创建命令仍在爆炸。

edit2

错误的堆栈跟踪:

org.apache.zookeeper.KeeperException$UnimplementedException: KeeperErrorCode = /larry-smells/foop 未实现 org.apache.zookeeper.KeeperException.create(KeeperException.java:103) 在 org.apache.zookeeper.KeeperException.create(KeeperException.java:51) 在 org.apache.zookeeper.ZooKeeper.create(ZooKeeper.java:1297) 在 org.apache.curator.framework.imps.CreateBuilderImpl$17.call(CreateBuilderImpl.java:1040) 在 org.apache.curator.framework.imps.CreateBuilderImpl$17.call(CreateBuilderImpl.java:1023) 在 org.apache.curator.connection.StandardConnectionHandlingPolicy.callWithRetry(StandardConnectionHandlingPolicy.java:67) 在 org.apache.curator.RetryLoop.callWithRetry(RetryLoop.java:99) 在 org.apache.curator.framework.imps.CreateBuilderImpl.pathInForeground(CreateBuilderImpl.java:1020) 在 org.apache.curator.framework.imps.CreateBuilderImpl.protectedPathInForeground(CreateBuilderImpl.java:501) 在 org.apache.curator.framework.imps.CreateBuilderImpl.forPath(CreateBuilderImpl.java:491) 在 org.apache.curator.framework.imps.CreateBuilderImpl$4.forPath(CreateBuilderImpl.java:367) 在 org.apache.curator.framework.imps.CreateBuilderImpl$4.forPath(CreateBuilderImpl.java:309) 在 com.mycompany.app.App.main(App.java:35)

【问题讨论】:

    标签: apache apache-zookeeper apache-curator


    【解决方案1】:

    编辑:显然,如果您将 Curator 与 Zookeeper 的错误组合使用,则可能会发生此错误。来自curator.apache.org:

    Curator 2.x.x - 与 ZooKeeper 3.4.x 和 ZooKeeper 3.5.x 兼容

    Curator 3.x.x - 仅与 ZooKeeper 3.5.x 兼容,包括对动态重新配置等新功能的支持。


    仅使用错误代码而不是堆栈跟踪很难确定您的问题,但我建议您进行一些改进以使您的应用程序更稳定:

    public class App {
        public static void main( String[] args ) {
            CuratorFramework client = CuratorFrameworkFactory.newClient("0.0.0.0:32770", new RetryUntilElapsed(3000, 1000));
            client.start();
    
            try {
                //make sure you're connected to zookeeper.
                client.blockUntilConnected();
    
                //Make sure the parents are created.
                client.create().creatingParentsIfNeeded().forPath("/larry-smells/foop", "tuna?".getBytes());
            } catch (Exception e) {
                System.out.println(e.toString());
                }
    
        }
    }
    

    【讨论】:

    • 进行了建议的更改并得到了相同的结果。我还将堆栈跟踪添加到问题的文本中。
    • doots -- 原来我是个丁克。该问题在策展人主页底部的警告中明确说明了有关仅使用 v2 和 Zookeeper 版本
    【解决方案2】:

    我也遇到过类似的异常,我使用了以下兼容的依赖项并帮助我解决异常。

        <dependency>
            <groupId>org.apache.zookeeper</groupId>
            <artifactId>zookeeper</artifactId>
            <version>3.4.6</version>
        </dependency>
    
        <dependency>
            <groupId>org.apache.curator</groupId>
            <artifactId>curator-framework</artifactId>
            <version>4.0.1</version>
        </dependency>
    
        <dependency>
            <groupId>org.apache.curator</groupId>
            <artifactId>curator-x-discovery</artifactId>
            <version>4.0.1</version>
        </dependency>
    

    【讨论】:

      【解决方案3】:

      我遇到了同样的问题。

      我尝试使用 inTransaction () ,如下所述:http://www.programcreek.com/java-api-examples/index.php?api=org.apache.curator.framework.CuratorFramework 练习 6 并且似乎有效。

      client.inTransaction ().create().forPath("/larry-smells/foop", "tuna?".getBytes()).and ().commit ();
      

      【讨论】:

      • 谢谢,这个很有用,尤其是inTransaction()
      【解决方案4】:

      问题是由于不兼容引起的。

      要解决此问题,您需要更改版本,如下所述:
      https://curator.apache.org/zk-compatibility.html

      如果这不起作用,只需查找依赖于 3.4.x zookeeper 版本的最新 curator 版本(当前为 '2.12.0')。

      【讨论】:

        【解决方案5】:

        @Massimo Da Ros 解决方案有效,但在新版本 Curator 4.0.0 inTransaction 已弃用,建议使用如下transaction 方法:

        CuratorOp op = client.transactionOp().create()
                    .withMode(CreateMode.PERSISTENT)
                    .withACL(Ids.OPEN_ACL_UNSAFE)
                    .forPath("/test", "Data".getBytes());
        result = client.transaction().forOperations(op).get(0).toString();
        

        【讨论】:

          【解决方案6】:

          我遇到了类似的问题。我使用的是spring-cloud-starter-zookeeper-discovery,它本身当然有兼容的zookeeper和curator版本。

              <dependency>
                  <groupId>org.springframework.cloud</groupId>
                  <artifactId>spring-cloud-starter-zookeeper-discovery</artifactId>
              </dependency>
          

          我检查了依赖树和spring-cloud-starter-zookeeper-discovery 版本3.1.1。正在使用zookeeper 版本3.6.0

          问题是,在我的 docker-compose.yml 中,我使用的是 zookeeper 版本 3.4!

          所以请确保您的 docker-compose.yml zookeeper 版本适合您的 maven zookeeper 版本。

          version: "3.8"
          services:
            zookeeper:
              container_name: zookeeper
              image: zookeeper:3.6  <----------------- zookeeper version
              ports:
                - "2181:2181"
          
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2017-05-13
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多