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

Sky*_*Sky 8 java search elasticsearch

我正在将数百万条记录摄取到 Elasticsearch 中,并从 Elasticsearch 中提取记录。我实际上使用的是 Elasticsearch Java 客户端。我在每个 JVM 上只创建一个客户端。使用这个客户端,将数据摄取到 Elasticsearch 中,并使用它从 Elasticsearch 中提取数据。提取数据写入文件并进行一些分析,再次写入文件并将数据摄取回弹性搜索。

  1. 这是在一个 JVM 上仅创建一个 Java 客户端并使其保持活动状态的最佳方式吗?

  2. 或在需要时创建客户端并摄取/提取数据,关闭它。

  3. 或者创建客户端池并重用它。(比如连接池)

做这个的最好方式是什么 ?

Ami*_*wal 1

这是一个非常好的问题,但根据我在真正可扩展的大型 Elasticsearch 系统方面的经验,我在单个 JVM 中没有看到超过一个 ES 客户端,这些客户端是单例且线程安全的,出于以下原因,您也应该坚持使用单个 ES每个 JVM 的客户端。

  1. 出于性能原因,您应该在elasticsearch客户端进行优化,就像在您的例子中,您可以拥有专用的摄取节点来提高摄取速度。
  2. 您还可以拥有专用的协调节点来进一步提高搜索速度。
  3. 每个 JVM 的客户端较少也会导致应用程序中的内存利用率降低并减少混乱。