我已经阅读了很多有关Elasticsearch中的索引刷新的文章。我了解大于0的不同间隔的含义,这是连续段刷新之间经过的时间,使它们可用于搜索。但是,我不确定到底refresh_interval: -1
是什么。以我的理解,这是一种禁用自动索引刷新但不能完全禁用的方法。即使将refresh_interval
设置为-1,Elasticsearch仍会不时刷新段。我不知道如果禁用自动刷新,哪种机制将控制此刷新活动。
对不起,我知道我没有很多代码可发布,因此我将为我提供一些背景知识。我的应用程序不需要近乎实时的搜索;它只需要最终的一致性。但是,这种偶然性应该是合理的,即在几秒钟到不到一分钟的时间内,而不是半个小时。我想知道是否可以让它留给Elasticsearch决定什么时候最好在其方便时刷新,而不是定期刷新。原因是因为禁用自动刷新的确为我的应用程序带来了一些性能上的好处,例如,在垃圾回收间隔之间,JVM堆大小的使用没有那么积极地增加(请参见下图)
您的理解有些混乱。刷新索引和写入磁盘是两个不同的过程,并且不一定相关,因此,即使srefresh_interval
为-1 ,您对段仍在写入的观察。
对文档建立索引后,会将其添加到内存缓冲区中并附加到事务日志文件中。刷新后,会将缓冲区中的文档写入没有fsync的新段中,该段将打开以使其可见以进行搜索并清除缓冲区。该超越对尚未清除,并没有什么实际保存在磁盘上(因为没有fsync
)。
现在想象一下刷新没有发生:没有索引刷新,您无法搜索文档,段未在缓存中创建。
此处的设置将决定何时进行刷新(写入磁盘)。默认情况下,当日志的大小达到512mb时或30分钟后。这实际上是将数据持久存储在磁盘上,其他所有内容都在文件系统缓存中(如果节点死掉或计算机重新启动,则缓存将丢失,并且转储是唯一的解决方法)。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句