当有新数据写入时,会被写入到indexing buffer当中。此时数据还不能被search到,通过refresh操作将JVM堆内存中的indexing buffer中的新数据刷到OS的file system 上面,这时在filesystem上的数据会形成segment(基于lucence的倒排索引文件)可以被search到。
indices.memory.index_buffer_size 接受百分比或字节大小的值。 它默认为10%,这意味着分配给一个节点的总堆栈的10%将用作所有分片共享的索引缓冲区大小。
数据存在os filesystem cache会存在风险,比如ES集群节点意外down掉或者ES重启,因为这时数据还没有持久化到磁盘上面,os内存数据丢失是灾难性不可逆的。那么translog就可以上场了,它记录了ES一系列操作,新数据写入时,不仅会被写到indexing buffer,该操作记录也会存入在translog当中。当出现数据丢失时,通过它可以恢复原有数据,从而保证数据安全性。
那么tranlog文件随着时间的推移,记录操作项越来越多,文件也会越来越大,直到数据持久化到硬盘上,也就是flush,此时数据已经安全了,translog文件才会被清空。
flush的时机可能是:
1.定时flush;
2.translog大小达到阈值;
3.一些重要操作;
4.指令触发。
ElasticSearch数据写入流程
最新推荐文章于 2023-11-23 13:16:59 发布