上下文:我想在bolt中共享配置信息而不是通过配置文件传递,希望将其加载到ZooKeeper中。当螺栓上升时,它可以从那里读取。
我的偏好是使用与Storm相同的ZooKeeper实例,所以问题是如何从一个螺栓中访问Storm ZooKeeper?
我查看了Java文档,并担心这条路似乎不明显。
答案 0 :(得分:1)
以下是我通过策展人API在风暴中使用zookeeper的方法:
List<String> servers = (List<String>) conf.get(Config.TRANSACTIONAL_ZOOKEEPER_SERVERS);
Long port = (Long) conf.get(Config.TRANSACTIONAL_ZOOKEEPER_PORT);
if (servers == null || port == null) {
servers = (List<String>) conf.get(Config.STORM_ZOOKEEPER_SERVERS);
port = (Long) conf.get(Config.STORM_ZOOKEEPER_PORT);
}
String connectionString = servers.get(0) + ":" + port.toString();
curatorFramework = CuratorFrameworkFactory.builder()
.connectString(connectionString)
.namespace(config.getNamespace())
.retryPolicy(new ExponentialBackoffRetry(1000, 3))
.build();
conf是open或prepare方法中传递给每个spout和bolt的配置对象/ map。 namespace是一个字符串,用于标识您将读取和写入的路径,并尝试将与zookeeper的所有交互与风暴正在进行的操作分开。