我有一个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();
}
});
}