此 API 用于取消集群中的一个或多个任务。
API #
POST /_tasks/_cancel
POST /_tasks/{task_id}/_cancel
API 的作用 #
取消集群中正在执行的一个或多个任务。此 API 支持多种取消策略:
- 取消指定任务:通过 task_id 取消特定任务
- 按节点取消:取消特定节点上的所有任务
- 按类型取消:取消特定类型的任务
- 取消父任务:取消父任务及其所有子任务
API 的参数 #
路由参数 #
| 参数 | 类型 | 是否必需 | 描述 |
|---|---|---|---|
task_id | string | 可选 | 要取消的任务 ID 格式: node_id:task_number如果不提供,可通过查询参数取消多个任务 |
查询字符串参数 #
| 参数 | 类型 | 是否必需 | 默认值 | 描述 |
|---|---|---|---|---|
nodes | string | 可选 | 所有节点 | 指定要取消任务的节点列表 逗号分隔的节点 ID 例如: node1,node2 |
actions | string | 可选 | 所有操作 | 指定要取消的任务操作类型 支持通配符 例如: cluster:*, indices:admin |
parent_task_id | string | 可选 | 无 | 指定父任务 ID 取消该父任务的所有子任务 格式: node_id:task_number |
wait_for_completion | boolean | 可选 | false | 是否等待取消操作完成true:阻塞直到任务取消完成false:取消开始后立即返回 |
timeout | time | 可选 | 无 | 操作超时时间 格式: 30s, 1m, 5m 等 |
group_by | string | 可选 | 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 字段确认任务是否可取消。
使用场景 #
- 停止长时间运行的任务:取消执行时间过长的任务
- 释放资源:释放占用集群资源的任务
- 错误恢复:取消执行错误的任务
- 批量管理:批量取消某类任务
注意事项 #
- 此 API 只支持 POST 方法
- 取消操作是异步的,
wait_for_completion=true会等待取消完成 - 某些任务可能无法取消,会返回错误信息
- 取消正在进行的写入操作可能导致部分数据未写入
- 取消操作本身也受超时限制
最佳实践 #
- 确认任务 ID:取消前确认任务 ID 正确
- 检查可取消性:检查任务的
cancellable属性 - 使用通配符谨慎:批量取消时确保匹配范围正确
- 等待取消完成:重要任务建议使用
wait_for_completion=true - 监控取消结果:检查
failures字段确认取消是否成功





