Elasticsearch 中 -1 refresh_interval 到底是什么意思?

2024-04-02

我读了很多关于 Elasticsearch 中索引刷新的文章。我理解大于 0 的不同间隔的含义,这是连续段刷新之间经过的时间,使它们可用于搜索。但是,我不确定什么refresh_interval: -1确实如此。根据我的理解,这是禁用自动索引刷新的一种方法,但不是完全禁用。尽管 Elasticsearch 仍然会时不时地刷新段refresh_interval设置为-1。我想知道如果自动刷新被禁用,哪种机制会控制这种刷新活动。

抱歉,我知道我没有太多代码要发布,所以我将介绍一些我所追求的背景。我的应用程序不需要近乎实时的搜索;它只需要最终一致性。然而,这种可能性应该是合理的,即在几秒到不到一分钟内,而不是半小时内。我想知道是否可以让 Elasticsearch 决定何时最好在方便时刷新,而不是定期刷新。原因是因为禁用自动刷新确实会给我的应用程序带来一些性能方面的好处,例如在垃圾收集间隔期间,JVM 堆大小使用量的增长幅度较小(参见下图)


你的理解有点混乱。刷新索引和写入磁盘是两个不同的过程,并且不一定相关,因此即使您观察到段仍在写入,即使refresh_interval is -1.

当文档被索引时,它会被添加到内存缓冲区中并附加到 translog 文件中。当刷新发生时,缓冲区中的文档将被写入新的段中,没有 fsync,该段被打开以使其对搜索可见,并且缓冲区被清除。这translog 尚未清除实际上没有任何东西被持久化到磁盘上(因为没有fsync).

现在想象刷新没有发生:没有索引刷新,您无法搜索文档,段不会在缓存中创建。

设置here https://www.elastic.co/guide/en/elasticsearch/reference/current/index-modules-translog.html#_flush_settings将指示何时发生刷新(写入磁盘)。默认情况下,当 translog 大小达到 512mb 时,或 30 分钟后。这实际上是将数据持久保存在磁盘上,其他所有内容都在文件系统缓存中(如果节点死亡或机器重新启动,缓存就会丢失,translog 是唯一的救赎)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Elasticsearch 中 -1 refresh_interval 到底是什么意思? 的相关文章

随机推荐