📣 极限科技诚招搜索运维工程师(Elasticsearch/Easysearch)- 全职/北京 👉 : 立即申请加入

此 API 用于取消集群中的一个或多个任务。

API #

POST /_tasks/_cancel
POST /_tasks/{task_id}/_cancel

API 的作用 #

取消集群中正在执行的一个或多个任务。此 API 支持多种取消策略:

  • 取消指定任务:通过 task_id 取消特定任务
  • 按节点取消:取消特定节点上的所有任务
  • 按类型取消:取消特定类型的任务
  • 取消父任务:取消父任务及其所有子任务

API 的参数 #

路由参数 #

参数类型是否必需描述
task_idstring可选要取消的任务 ID
格式:node_id:task_number
如果不提供,可通过查询参数取消多个任务

查询字符串参数 #

参数类型是否必需默认值描述
nodesstring可选所有节点指定要取消任务的节点列表
逗号分隔的节点 ID
例如:node1,node2
actionsstring可选所有操作指定要取消的任务操作类型
支持通配符
例如:cluster:*, indices:admin
parent_task_idstring可选指定父任务 ID
取消该父任务的所有子任务
格式:node_id:task_number
wait_for_completionboolean可选false是否等待取消操作完成
true:阻塞直到任务取消完成
false:取消开始后立即返回
timeouttime可选操作超时时间
格式:30s, 1m, 5m
group_bystring可选nodes响应中任务的分组方式
可选值:nodes, parents, none

请求示例 #

# 取消指定任务
POST /_tasks/Mgqdm0f9SEGClWxp_RdnaQ:17416/_cancel

# 取消特定节点上的所有任务
POST /_tasks/_cancel?nodes=node1,node2

# 取消特定类型的任务
POST /_tasks/_cancel?actions=cluster:*

# 取消父任务的所有子任务
POST /_tasks/_cancel?parent_task_id=Mgqdm0f9SEGClWxp_RdnaQ:1000

# 取消任务并等待完成
POST /_tasks/_cancel?wait_for_completion=true

# 设置超时时间
POST /_tasks/_cancel?wait_for_completion=true&timeout=30s

# 组合使用多个参数
POST /_tasks/_cancel?nodes=node1&actions=indices:*&wait_for_completion=true&timeout=1m

响应示例 #

成功响应(不等待完成) #

{
  "nodes": {
    "Mgqdm0f9SEGClWxp_RdnaQ": {
      "name": "data-node-1",
      "tasks": [
        {
          "task_id": "Mgqdm0f9SEGClWxp_RdnaQ:17416",
          "type": "transport",
          "action": "indices:data/write/reindex",
          "description": "reindex from [source] to [target]",
          "cancellable": true,
          "cancelled": true
        }
      ]
    }
  }
}

成功响应(等待完成) #

{
  "nodes": {
    "Mgqdm0f9SEGClWxp_RdnaQ": {
      "name": "data-node-1",
      "tasks": [
        {
          "task_id": "Mgqdm0f9SEGClWxp_RdnaQ:17416",
          "type": "transport",
          "action": "indices:data/write/reindex",
          "description": "reindex from [source] to [target]",
          "cancellable": true,
          "cancelled": true,
          "status": "completed"
        }
      ]
    }
  },
  "failures": []
}

部分失败响应 #

{
  "nodes": {
    "Mgqdm0f9SEGClWxp_RdnaQ": {
      "name": "data-node-1",
      "tasks": [
        {
          "task_id": "Mgqdm0f9SEGClWxp_RdnaQ:17416",
          "cancelled": true
        }
      ]
    }
  },
  "failures": [
    {
      "task_id": "node2:12345",
      "reason": "task not found"
    }
  ]
}

任务操作类型 #

支持的任务操作类型(actions)包括:

模式描述
cluster:*所有集群级别的操作
indices:*所有索引相关的操作
indices:data/write/*所有索引写入操作
indices:data/read/*所有索引读取操作
indices:admin/*所有索引管理操作

取消策略 #

按节点取消 #

# 取消特定节点上的所有任务
POST /_tasks/_cancel?nodes=node1,node2

按操作类型取消 #

# 取消所有写入操作
POST /_tasks/_cancel?actions=indices:data/write/*

# 取消所有集群管理操作
POST /_tasks/_cancel?actions=cluster:admin/*

按父任务取消 #

# 取消父任务的所有子任务
POST /_tasks/_cancel?parent_task_id=node1:1000

可取消的任务 #

并非所有任务都可以取消。任务的可取消性取决于:

  • 任务类型:某些任务(如系统内部任务)不可取消
  • 任务状态:已完成或失败的任务无法取消
  • 任务实现:任务是否实现了取消逻辑

检查响应中的 cancellable 字段确认任务是否可取消。

使用场景 #

  1. 停止长时间运行的任务:取消执行时间过长的任务
  2. 释放资源:释放占用集群资源的任务
  3. 错误恢复:取消执行错误的任务
  4. 批量管理:批量取消某类任务

注意事项 #

  1. 此 API 只支持 POST 方法
  2. 取消操作是异步的,wait_for_completion=true 会等待取消完成
  3. 某些任务可能无法取消,会返回错误信息
  4. 取消正在进行的写入操作可能导致部分数据未写入
  5. 取消操作本身也受超时限制

最佳实践 #

  1. 确认任务 ID:取消前确认任务 ID 正确
  2. 检查可取消性:检查任务的 cancellable 属性
  3. 使用通配符谨慎:批量取消时确保匹配范围正确
  4. 等待取消完成:重要任务建议使用 wait_for_completion=true
  5. 监控取消结果:检查 failures 字段确认取消是否成功

相关文档 #