使用Java客户端从Elasticsearch导入/导出数据的最佳方法

8
我正在将数百万条记录导入到Elasticsearch中,并从Elasticsearch中提取记录。我实际上是使用Elasticsearch Java客户端。在每个JVM上仅创建一个客户端。使用此客户端,将数据导入Elasticsearch,并使用相同的客户端从Elasticsearch中提取数据。提取的数据写入文件并进行一些分析,再次写入文件并使用其导入数据到Elasticsearch。
以下是需要翻译的内容:
  1. 这是在一个JVM上创建一个Java客户端并保持其活动的最佳方式吗?

  2. 还是在需要时创建客户端,然后导入/提取数据,关闭它。

  3. 或者创建客户端池并重复使用它。(类似于连接池)

哪种方法是最好的?

1个回答

1

这是一个非常好的问题,但基于我对可扩展性和大规模 Elasticsearch 系统的经验,我从未在单个 JVM 中看到过多个 ES 客户端,这些客户端是单例和线程安全的,出于以下原因,您也应该坚持每个 JVM 一个单一的 ES 客户端。

  1. 出于性能原因,您应该在 Elasticsearch 客户端端进行优化,例如在您的情况下,您可以拥有一个 专用摄取节点 以提高摄取速度。
  2. 您还可以拥有一个 专用协调节点 以进一步提高搜索速度。
  3. 每个 JVM 较少的客户端也将导致较少的内存利用和应用程序中的混乱。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接