elastic search中的retention leases

https://www.elastic.co/guide/en/elasticsearch/reference/7.9/index-modules-history-retention.html

elastic·search有的时候需要回放一些在索引上的操作。拿个具体的场景举例,

从Lucene的角度来说,没有删除操作,只有新增和删除操作。所谓的更新操作,也是es将删除和更新封装成了一个原子操作。

当一个文档放入Lucene时会有回放操作,但是删除的时候没有,为了弥补这种情况,es提供了一个叫做软删除的功能,就是保留最近删除的文档,也是用于回放。那这个软删除 什么时候被真正的删除呢,就是当没有任何的存留期用到的时候。

因为软删除要占用空间,所以es也只是保留最近删除的,这样才不会导致空间越来越大。

es中有一个机制叫做 分片历史存留期 (shard history retention leases),这个机制就是记录一些将来有可能回放的操作。每一个操作都是有一个序列号的,当有新的操作产生,这个序列号就会增长。

当一个分片连不上的时候,retention leases肯定就不会更新了。当它再连上的时候,es会把这个分片失联这段时间的操作在这个分片上回放一遍。所以这种情况下分片从连不上到连上肯定是比较快的。因为retention leases是有过期时间的,默认是12个小时。如果超过12个小时,分片才连上,失联期间的操作无法通过回放完成,只能通过复制整个索引来处理。

猜你喜欢

转载自blog.csdn.net/weixin_39394909/article/details/108684665
今日推荐