elasticsearch如何处理不同任务的优先级?

83qze16e  于 2022-11-02  发布在  ElasticSearch
关注(0)|答案(1)|浏览(262)

假设一个elasticsearch服务器在很短的时间内接收到100个任务,有些任务很短,有些任务很耗时,有些任务是删除任务,有些是插入和搜索查询,elasticsearch如何决定先运行哪个任务,以及并发执行多少个任务。
在ElasticSearch端是否有任务执行策略,或者它只是处理FIFO队列中的所有任务,并允许固定数量的任务同时运行?
我希望ES有一些任务顺序优化的功能。否则,我们必须手动检查任务的状态,设置一些超时和做一些重试,这有点不方便。

wztqucjr

wztqucjr1#

很好的问题,因为没有足够的文档关于任务执行优先级,我们可以看看Elasticsearch的源代码来了解它是如何工作的。
首先,Elasticsearch清楚地解释了他们维护不同的线程池来执行不同类型的任务,正如他们的官方文档中所解释的那样。
使用上述文档可以清楚了解以下内容:
1.它们具有不同的线程池和队列**(具有不同的容量)以执行不同类型的任务,如管理任务、搜索任务、索引任务等
1.不同的线程池使Elasticsearch能够并行执行任务
,避免饥饿**,并有助于调度任务/确定任务优先级。
现在来说说任务执行的调度/优先级/优化,这在文档中没有很好的解释,我查看了Elasticsearch源代码,发现了在Elasticsearch代码中多个位置使用的Priority java class,为了定义任务的优先级,请参考FrozenCacheService代码,该代码使用LOW优先级,因为更新此缓存并不是一个太高的优先级。另一方面,slowclusterStateProcessing在ElasticSearch中使用称为IMMEDIATE的最高优先级。
你还可以看到这个Priority枚举也在PrioritizedEsThreadPoolExecutor中使用,它再次用于创建我的帖子开头所解释的不同的线程池。

简而言之,Elasticsearch确实可以根据任务类型对任务进行排序,以优化任务的执行。
**编辑:**与搜索查询优先级排序相关的问题https://github.com/elastic/elasticsearch/issues/37867以及在该方向上的一些工作https://github.com/elastic/elasticsearch/pull/57936

相关问题