使用elasticsearch进行风暴,无法获取始终为null的Client

时间:2014-04-10 10:15:20

标签: elasticsearch apache-storm

我有一个风暴拓扑,其中一个螺栓应该与ElasticSearch交互。

public static Client client;
public static Settings settings;
public SomeBolt(){
    settings =
            ImmutableSettings.settingsBuilder().put("cluster.name", "elasticsearch").build();
    client = new TransportClient(settings)
            .addTransportAddress(new InetSocketTransportAddress("someip", 9300));

}

在本地模式下运行拓扑时效果很好,但是当我尝试在集群模式下运行拓扑时,该客户端获取空值并且无法执行下一步。

我甚至尝试在本地模式的管理员机器中运行它,它可以工作。只有在群集模式下才能获得TransportClient。

有可能的原因吗?

1 个答案:

答案 0 :(得分:0)

你必须记住所有的喷口和螺栓都必须是可序列化的,因为它们(可能)会在它们的构造和启动之间绕网移动。

因此,在构造函数中,您不能(例如)打开任何网络连接(例如在您的情况下创建ES客户端)。 您必须在螺栓的准备方法上执行此操作。

此外,我建议您将客户端声明为瞬态(而非静态)。