如何实现Elasticsearch transforms从停止状态自动恢复运行
Elasticsearch Transform任务重启自动恢复解决方案
可以修改该默认行为,根据你使用的Elasticsearch版本不同有两种实现方式:
方案1:7.13及以上版本使用原生配置实现
7.13版本开始Elasticsearch为Transform任务新增了故障重试和自动恢复配置,无需额外开发即可实现需求:
- 创建/更新Transform任务时,在
settings参数中添加num_failure_retries配置项,设置为大于0的数值即可让任务在异常停止后自动重试重启,如果你希望无限重试直到成功,可以设置为-1 - 新任务创建示例:
PUT _transform/your_transform_id { "source": { "index": "your_source_index" }, "dest": { "index": "your_dest_index" }, "settings": { "num_failure_retries": -1 }, // 此处补充你的pivot/latest等业务配置 }
- 已创建任务修改配置示例:
POST _transform/your_transform_id/_update { "settings": { "num_failure_retries": -1 } }
- 该配置不仅能实现ES重启后自动恢复任务,也能处理其他非用户主动停止导致的任务异常停止场景。
方案2:7.13以下版本使用自定义脚本实现
低版本没有原生支持的自动恢复配置,可以通过定时脚本轮询实现:
- 实现逻辑:定时调用
GET _transform/*/_stats接口,筛选出状态为stopped且停止原因不是用户主动停止的任务,调用POST _transform/<transform-id>/_start接口启动即可 - 简单shell脚本示例(需提前安装jq工具):
# 替换为你的ES地址、认证信息 ES_HOST="http://127.0.0.1:9200" ES_USER="your_username" ES_PWD="your_password" # 获取所有非用户主动停止的stopped状态transform任务 FAILED_TRANSFORMS=$(curl -s -u "$ES_USER:$ES_PWD" -XGET "$ES_HOST/_transform/*/_stats" | jq -r '.transforms[] | select(.state == "stopped" and .reason != "user stopped") | .id') for TRANSFORM in $FAILED_TRANSFORMS; do # 启动异常停止的任务 curl -s -u "$ES_USER:$ES_PWD" -XPOST "$ES_HOST/_transform/$TRANSFORM/_start" done
- 把上述脚本加入crontab或者其他定时任务系统,按照你的业务容忍度设置执行间隔即可。
内容的提问来源于stack exchange,提问作者Vidya
相关产品推荐
相关产品推荐

