Translog(全称 Transaction Log,事务日志)是 Elasticsearch 中用于保证数据持久性(Durability)和数据恢复的一个关键组件。 简单来说,它就是 Elasticsearch 的 “预写日志”(Write-Ahead Log, WAL)。 为了让你透彻理解,我们需要先了解 Elasticsearch 写入数据的痛点,再看 Translog 是如何解决这个问题的。 --- 1. 为什么需要 Translog?(背景与痛点) Elasticsearch 底层依赖 Lucene 来进行索引和搜索。在 Lucene 中,将数据写入磁盘(生成 Segment 并执行 fsync)是一个非常消耗资源且缓慢的操作(IO 操作)。 矛盾点:如果每新增一条文档都立即刷新到磁盘,性能会极差;但如果只是写在内存里,一旦服务器宕机或断电,内存中的数据就会丢失。 Elasticsearch 的机制: 1. 数据先写入内存缓冲区(Memory Buffer)。 2. 每隔一段时间(默认 1 秒),执行 操作,将缓冲区的数据写入操作系统的文件缓存(OS Cache),生...