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 永远不会取消我长时间运行的加载数据功能