将 Nifi 连接到 Elasticsearch 时出错

Getting error when connecting Nifi to Elasticsearch

我在 Ubuntu 16.04.3 LTS 的虚拟机实例上安装了 Nifi 1.4.0 和 Elasticsearch 5.6.2。

我的目标 是使用 Nifi 从 Twitter 提取一些数据,将其存储在 Elasticsearch 中,最终我将在 Kabana 中使用这些数据。

问题 一切都在孤立地工作,也就是说我可以直接从命令行向 Elasticsearch 添加数据并检索它。我还可以访问 Nifi,并且成功地从 Twitter 中提取数据并将其传递给 PutElasticsearch 处理器。

Nifi 从 Twitter 拉取数据然后抛出错误的图片

抛出的异常如下: PutElasticsearch[id=fbb5f3cf-015e-1000-8321-71b19eef4054] Failed to insert into Elasticsearch due to None of the configured nodes are available: [{#transport#-1}{127.0.0.1}{localhost/127.0.0.1:9300}]. More detailed information may be available in the NiFi logs.: NoNodeAvailableException[None of the configured nodes are available: [{#transport#-1}{127.0.0.1}{localhost/127.0.0.1:9300}]]

在我的研究中,我看到一些人看到了同样的错误,但他们都声称将端口更改为 :9300 可以解决他们的问题。正如您在下面的我的 PutElasticsearch 处理器配置选项卡图片中看到的那样,这不应该是这里的问题。

PutElasticsearch 处理器配置图片

我真的很感激一些帮助,我很难过。

PutElasticsearch 使用本机传输 API,有效地让 NiFi 节点成为集群的一部分。因此,它对集群的版本与 Elasticsearch 捆绑包中包含的传输库的版本非常敏感。目前 PutElasticsearch 使用 2.1.0 版本的传输库,几乎可以肯定它与 5.6.2 集群不兼容。我应该提一下,有一个使用 5.0.1 版本库的 PutElasticsearch5 处理器,但由于次要版本差异很大,这也可能与 5.6.2 集群不兼容。

但是,有一组 "Http" 版本的 Elasticsearch 处理器(例如 PutElasticsearchHttp and PutElasticsearchHttpRecord)使用 REST API 与集群通信。由于 REST API 在 ES 版本中更加稳定,您通常可以使用这些来实现您的目标。权衡是性能,由于与集群的额外通信开销,处理器的 Http 版本稍微慢一些。

请使用 Nifi 1.4.0 和 elasticsearch-5.6.5 和 PutElasticsearch5 作为处理器。它对我有用。

我在 PutElasticsearch 和 PutElasticseach5 上遇到了同样的问题,所以我切换到 PutElasticsearchHttp。这有点慢但绝对有效 - 我已经使用 ES Ver 6.5.2 和 6.3.1 进行了测试,因此绝对适用于 5.6.2

需要牢记的几件事是

  1. 确保使用 HTTP 端口 - 默认为 localhost:9200
  2. 如果您的 json 流是单行,您可能希望在将其传递给 PutElasticsearchHttp 之前将其拆分。否则它会给你一个解析错误。见下图:

Splitting Json in NiFi

希望这对您有所帮助!