从Storm Bolt内部访问ZooKeeper

时间:2015-02-16 20:24:47

标签: apache-storm apache-zookeeper

上下文:我想在bolt中共享配置信息而不是通过配置文件传递,希望将其加载到ZooKeeper中。当螺栓上升时,它可以从那里读取。

我的偏好是使用与Storm相同的ZooKeeper实例,所以问题是如何从一个螺栓中访问Storm ZooKeeper?

我查看了Java文档,并担心这条路似乎不明显。

1 个答案:

答案 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的所有交互与风暴正在进行的操作分开。