elasticsearch 使用elasticsearch风暴,无法获取始终为空的客户端,elasticsearch,apache-storm,elasticsearch,Apache Storm" /> elasticsearch 使用elasticsearch风暴,无法获取始终为空的客户端,elasticsearch,apache-storm,elasticsearch,Apache Storm" />

elasticsearch 使用elasticsearch风暴,无法获取始终为空的客户端

elasticsearch 使用elasticsearch风暴,无法获取始终为空的客户端,elasticsearch,apache-storm,elasticsearch,Apache Storm,我有一个风暴拓扑,其中一个螺栓应该与ElasticSearch交互 public static Client client; public static Settings settings; public SomeBolt(){ settings = ImmutableSettings.settingsBuilder().put("cluster.name", "elasticsearch").build(); client = new Transport

我有一个风暴拓扑,其中一个螺栓应该与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));

}
当我在本地模式下运行topology时,它工作得很好,但当我尝试在集群模式下运行它时,该客户机会得到空值,无法执行下一步

我甚至试着在本地模式下的监控机器上运行它,它运行正常。只有在群集模式下,它才能获取TransportClient


有什么可能的原因吗?

您必须记住,所有喷口和螺栓都必须是可序列化的,因为它们(可能)将在施工和启动之间在网络上移动

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


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

显示异常堆栈跟踪。