Elastic Search 取消长时间运行的任务

Posted

技术标签:

【中文标题】Elastic Search 取消长时间运行的任务【英文标题】:Elastic Search cancel long running task 【发布时间】:2021-06-23 04:43:10 【问题描述】:

适用于 Elastic Search 6.0 版

取消正在运行的任务:

POST _tasks/node_id:task_id/_cancel

我遵循同样的说法,但实际上它无法取消任务。运行此命令后,如果我运行 get 命令来获取所有正在运行的任务,则特定任务不会被取消。

如果我再次点击取消语句,它会声明task_id 已经被取消,但实际上它并没有被取消。

【问题讨论】:

【参考方案1】:

调用_tasks/<id>/_cancel 端点仅向 ES 表示任务应该被取消。然后,ES 将尽快取消任务。

但它可能不会立即生效,例如,如果您有一个非常复杂的搜索需要很长时间(例如,带有前导通配符的通配符查询)。

如果您检查ContextIndexSearcher 类并查找调用checkCancelled.run() 的所有位置,这些是可以取消查询的唯一阶段,但有时一个阶段可能需要很长时间才能取消资格。

如果您的任务是搜索任务,那么您可以尝试利用 timeout parameter 来查看它是否有帮助(原因可能并不总是与上述相同)。

【讨论】:

我使用的是ES 6.0版本,不支持timeout参数。我有一些运行很长时间的非常大的搜索查询,我想杀死那些正在运行的任务,但是 ES 没有杀死,即使在我运行取消命令后它们也会被执行。 是的,很遗憾,出于我提到的原因。并且可能在 ES 6 中,ContextIndexSearcher 可能还没有达到现在的水平。你想在另一个问题中分享你的查询吗,因为这是你唯一的筹码。 获取正在运行的任务我运行命令: 1. GET _tasks?actions=*search (我只想获取搜索相关的任务) 所以从这里我得到 node_id:task_id 来取消运行task: 1.POST _tasks/node_id:task_id/_cancel ES 文档也显示了这些语句,但它们不起作用。文档链接:elastic.co/guide/en/elasticsearch/reference/6.0/tasks.html 我的意思是您的搜索查询,那些需要很长时间才能运行的查询,这是我们应该关注并使其更快的轴。查询取消只是一个帮助,而不是这里的解决方案。 哦!!,我无法优化。这些是我需要处理的一些极端情况。对于某些搜索查询太长,所以我需要杀死它们。

以上是关于Elastic Search 取消长时间运行的任务的主要内容,如果未能解决你的问题,请参考以下文章

AWS Elastic Beanstalk Worker 在长时间计算期间不活动后超时

CancellationToken 永远不会取消我长时间运行的加载数据功能

ASP.NET Web API + 长时间运行的操作取消

为啥 Amazon Elastic Beanstalk 需要很长时间才能更新我的部署?

取消长时间运行的下载

如何取消 AJAX 长时间运行的 MVC 动作客户端(在 javascript 中)?