Zookeeper Client и связь - когда создавать и закрывать? - PullRequest
0 голосов
/ 02 июня 2019

У меня есть приложение Spring, которое помещает события в 2 темы кафки, которые извлекаются при потоковой передаче Spark. Я поддерживаю смещения в 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();

        }
    });

}
...