Zookeeper客户端和连接-何时创建和关闭?

时间:2019-06-02 08:09:51

标签: apache-zookeeper

我有一个Spring应用程序,可将事件推送到2个由Spark Streaming拉出的kafka主题中。我正在维持ZK的抵销额。我的问题是-

我是否应该在每次需要读写偏移量时创建ZKClient / ZkConnection实例?下面是代码-我想我应该只将这些对象作为静态字段创建一次。意思是,我不应该为每个电话都这样做。这是正确的吗?

我在这些类中检查过javadocs,但对我的上下文没有任何帮助。

public static void _writeOffsetIntoZK(List<OffsetRange> offsetRange) {

    offsetRange.forEach(new Consumer<OffsetRange>() {

        @Override
        public void accept(OffsetRange t) {
            ZKGroupTopicDirs zkGroupTopicDirs = new ZKGroupTopicDirs(groupName, topicName);

            String path = zkGroupTopicDirs.consumerOffsetDir() + "/" + t.partition();

            ACL acl = new ACL();
            acl.setId(ZooDefs.Ids.ANYONE_ID_UNSAFE);
            acl.setPerms(ZooDefs.Perms.ALL);
            List<ACL> aclList = Arrays.asList(acl);

            Tuple2<ZkClient, ZkConnection> createZkClientAndConnection = ZkUtils.createZkClientAndConnection(zkServersWithPort, sessionTimeout, connectionTimeout);
            ZkUtils zkUtils = new ZkUtils(createZkClientAndConnection._1, createZkClientAndConnection._2, false);

            zkUtils.updatePersistentPath(path, t.untilOffset() + "", aclList);

            createZkClientAndConnection._1.close();

        }
    });

}

0 个答案:

没有答案