弹性搜索延迟

时间:2021-01-11 20:47:54

标签: elasticsearch latency elasticsearch-performance

我正在使用 Elasticsearch 的 MultiSearch API 为我的一个端点同时发出多个搜索请求。我的理解是这些请求是并行完成的,但是我的端点的延迟随着我通过 API 发出的搜索请求的数量(<50)而增加。我有两个问题:

  • 为什么会出现这种延迟增加/多重搜索在幕后如何工作?我是 Elasticsearch 的新手,很抱歉我在这里缺乏知识。
  • 有哪些方法可以在保持多重搜索的同时改善延迟?

1 个答案:

答案 0 :(得分:0)

为了提供更全面的答案,最好了解您的集群设置。

这些请求确实是并行完成的,但您的集群仍然有其局限性。

我认为可能发生的情况是您可能没有足够的搜索线程来并行处理如此多的搜索,并且您的搜索线程池开始排队。

https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-threadpool.html

例如,如果您发出一个 MultiSearch 查询,假设有 10 个搜索查询,其中每个查询将命中 15 个分片,这意味着整个查询总共需要 150 个搜索线程。如果还有其他搜索在运行,而集群没有可用的搜索线程 - 它们将开始排队,如果队列变得太大,最终可能会拒绝。

你能做些什么?

  • 仔细检查索引设置、它们的 number_of_shards 分片和索引大小。减少 number_of_shards 将需要更少的搜索线程。在 number_of_shards 和索引大小及其文档数之间找到平衡。如果文档少于 5M,则将所有内容保存在单个分片中,否则,尝试使用 3M-5M 文档的分片,例如23M 文档的索引可以使用 5 或 6 个分片。
  • 通过添加新节点水平扩展集群,这将添加新的搜索线程
  • 调整默认线程池设置(这通常是您要做的最后一件事)