【问题标题】:Best way to import/export data from Elasticsearch using Java client使用 Java 客户端从 Elasticsearch 导入/导出数据的最佳方式
【发布时间】:2016-11-17 18:58:39
【问题描述】:
我正在将数百万条记录提取到 Elasticsearch 中,并从 Elasticsearch 中提取记录。我实际上正在使用 Elasticsearch Java 客户端。我在每个 JVM 上只创建一个客户端。使用此客户端,将数据摄取到 Elasticsearch 中,并使用相同的方法从 Elasticsearch 中提取数据。提取数据写入文件并进行一些分析,再次写入文件并将数据摄取回elasticsearch。
-
这是在一个 JVM 上仅创建一个 Java 客户端并使其保持活动状态的最佳方法吗?
-
或在需要时创建客户端并摄取/提取数据,然后关闭它。
-
或者创建客户端池并重用它。 (如连接池)
最好的方法是什么?
【问题讨论】:
标签:
java
search
elasticsearch
【解决方案1】:
这是一个非常好的问题,但根据我在真正可扩展且庞大的 Elasticsearch 系统方面的经验,我在单个 JVM 中没有看到多个 ES 客户端,这些客户端是单例和线程安全的,出于以下原因,您也应该坚持每个 JVM 单个 ES 客户端。
- 出于性能原因,您应该在 elasticsearch 客户端进行优化,就像您的情况一样,您可以使用dedicated ingest node 来提高摄取速度。
- 您还可以拥有dedicated co-ordinated node 以进一步提高搜索速度。
- 每个 JVM 的客户端越少,您的应用程序中的内存利用率和混乱也会越少。