关于Elasticsearch translog durability=request的疑问咨询
Elasticsearch Translog 相关疑问解答
疑问1:index.translog.durability=request 里的「commit」是Lucene commit吗?
不是。这里的commit指的是translog自身的提交操作:将translog的内存缓冲区执行fsync并持久化到磁盘,而非Lucene层面的commit。
Lucene commit开销高的原因是,它需要把内存中的segment刷写到磁盘,同时生成新的commit point标记可搜索的segment,涉及大量随机IO和元数据更新;而translog是追加式日志文件,它的commit是顺序IO操作,开销远低于Lucene commit,这也是translog能成为Lucene commit轻量化替代方案的核心原因。
疑问2:既然Lucene commit开销高,为何默认值是request而非async?
Elasticsearch默认将index.translog.durability设为request,核心原因是优先保障数据安全性:
- 在
request模式下,每个写请求得到确认(acknowledged)之前,translog都会完成刷盘操作。一旦发生硬件故障,所有已确认的写操作都不会丢失,这是绝大多数业务场景的基础可靠性要求。 - 而
async模式是定期(默认5秒)批量刷写translog,虽然性能更高,但如果在两次刷盘之间出现故障,这段时间内的已确认写操作会丢失,数据安全性无法得到保障。
因此,Elasticsearch选择了数据安全优先的策略,将request设为默认值,仅在用户明确追求极致性能、且能接受一定数据丢失风险的场景下,才建议切换到async模式。
内容的提问来源于stack exchange,提问作者maulik trapasiya
相关产品推荐
相关产品推荐

