弹性搜索延迟



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

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

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

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

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

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

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

你能做些什么?

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

最新更新