【问题标题】:Elasticsearch indexing multiple files in parallelElasticsearch 并行索引多个文件
【发布时间】:2020-12-27 14:39:56
【问题描述】:

我正在尝试在 ES 中索引多个文件。由于文件很多,每个文件都有自己的索引,因此顺序索引在生产使用中似乎很慢。我想要的是并行索引多个文件。假设我有 100 个文件,想一次索引 10 个文件并分 10 批完成索引。我预计 10 个文件索引和单个文件索引所花费的时间是相同的,因为它们是并行执行的,资源也足够了。但是,在 ES 方面,索引是按顺序进行的,索引 10 个文件所需的时间几乎是单个文件所需时间的 10 倍。

看起来 ES 索引是按顺序运行的,尽管从这个 question 发送了并行请求以进行索引。是否可以并行索引数据以减少索引时间,或者我在这里遗漏了什么?感谢您的帮助

注意:我在单节点设置中对此进行测试。这可能是个问题吗?

【问题讨论】:

  • 您要索引多少文件才能看到性能损失?
  • 串行索引 10 个文件和并行索引 10 个文件所花费的时间几乎相同。我期望在并行工作时减少时间
  • 10 个文件不算什么,如果您想查看结果,您应该尝试索引 1 000 000 个文件或至少 10 万个文件。我在生产中使用 elk,我没有看到 5-10 百万个文件的索引速度很慢。但是用elk在一个节点上做任何事情都是误解。他们甚至说,要使其发挥最佳效果,您至少需要 3 个节点。那么你能告诉我你的索引需要很长时间是什么意思吗?因为也许你只是做错了

标签: elasticsearch search indexing parallel-processing lucene


【解决方案1】:

由于您没有提供代码和性能测试编号,因此很难猜测,您在哪里犯了错误,我猜 当您说并行请求时,您同时发送 10 个不同的索引请求 这不是正确的方法,您应该改用 Bulk API,这是您设置的正确选择。

如果您已经在使用 Bulk API,请提供进一步调试问题所需的所有相关信息。

【讨论】:

  • 关于数字:我正在批量索引 60 个文件,索引大约需要 50 秒。每个文件都有自己的索引,这是使用批量索引完成的。为了模拟同时发生的情况,我尝试创建类似的 10 个组并并行发送索引请求。这需要将近 500 秒。我也期望在 50 秒左右完成。
  • @prms 所以您使用的是批量 API,对吗?您能否提供您的代码,以及您如何确保 ES 不会成为瓶颈?
  • 我正在使用 Python ES 包装器。我将不得不编写示例代码来分享。为了发送并行请求,我使用 Python ray 框架。我通过并行测试代码的各个步骤来进行实验。预处理、索引和搜索被分成单独的单元并并行发送。除了索引,其他操作都显示时间增益。索引是唯一显示乘法时序的方法。你能指出我学习并行索引多个索引的资源吗?关于代码,过段时间再分享给大家
  • @prms 用于写入操作 ES 使用elastic.co/guide/en/elasticsearch/reference/current/… 中提到的写入线程池,当您运行测试时,请确保此队列未满,最近其大小也增加到 10k。跨度>
  • @prms 运气好吗?已经有一段时间了,如果您可以投票并接受答案,那就太好了
猜你喜欢
  • 2012-07-09
  • 1970-01-01
  • 2017-06-09
  • 1970-01-01
  • 2021-08-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-02
相关资源
最近更新 更多