У меня есть приложение 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();
}
});
}