使用 nohup 或 disown 如果你要让某个进程运行在后台。

一个索引的forcemerge操作在什么情况下会被中断,是否支持手动中断

Elasticsearch | 作者 wangxinrong | 发布于2021年07月07日 | 阅读数:632

按照官方文档的说明:
1.不要在索引仍然有数据写入时执行forcemerge。
2.如果对一个索引执行了forcemerge操作,例如_forcemerge?max_num_segments=1,它是一个同步接口,会阻塞直到完成为止,如果此时用户断开,这个任务会转到后台继续执行,直到完成为止。
 
现在我有几个疑问:
1.我每天有定时任务对无数据写入的索引做forcemerge,大多数情况下都正常执行,但曾经出现过一两次单个分片的segment还没合并到一个时就中断了,不知道哪些情况下,可能导致这个操作中断。
2.假如我想要手动中断某个forcemerge操作,是否支持,似乎没有找到取消的方法。
3.假如我对已经没有写入的索引做_forcemerge?max_num_segments=1,后来又向索引中写入了数据,那最终它会变成每个分片中只有一个segment的状态吗,还是说forcemerge任务会中断,或者是任务能执行完,但最终达不到max_num_segments=1的状态?
已邀请:

tongchuan1992 - 学无止境、学以致用

赞同来自:

只是不建议对正在写入的索引做强制merge,回答你的问题:1.一般情况下这个操作会一直执行下去,是不是当时的时候你merger的索引的segment的文件有问题,例如权限。最好去看日志报错。
2.可以先看下执行forcemerge的task的作业ID,然后执行task的cancle可不可以停止。
3.一般不会最后是一个segment,它应该会首先慢慢merge,你有数据写入又会生成新的segmet,感觉会生成很多个segment,达不到你请求的目的。

Charele

赞同来自:

1 不能中断(kill ES进程,或者直接拔电源这些不算),
除非它自己异常报错。
 
2 merge开始时,它首先会flush。然后在这一刻的所有已存在的段里面选取拿来做merge,
(能不能选中看policy)
merge开始后,你再index数据肯定就是另外的段了,不可能在这次merge的作用范围里面。
所以merge结束后,不可能是一个段。

要回复问题请先登录注册