是什么?
translog是elasticsearch的事务日志文件,它记录了所有对索引分片的事务操作(add/update/delete),每个分片对应一个translog文件。
干嘛用的?
translog是用来恢复数据的。Es用“后写”的套路来加快写入速度 — 写入的索引并没有实时落盘到索引文件,而是先双写到内存和translog文件,
下图1中灰色部分(见蓝色箭头)表示数据出于 可搜索 & 未落盘 & 已写日志 的状态。此时如果掉电,es重启后还可以把数据从日志文件中读回来。
图1
什么时机写?
有两种玩法:
request — 每操作都写(默认策略),可靠性最高。
async — 异步定时写,可靠性跟时间间隔有关,试问自己断电时你能接受多少数据无法恢复?
我实际对比两种策略的性能数据,第二种的性能优势表现不明显。
存在哪里?
在索引分片目录下,取名translog(蓝色框),跟数据文件目录(金黄色)相邻。
translog-N.tlog - 真正的日志文件,N表示generation(代)的意思,通过它跟索引文件关联
tranlog.ckp - 日志的元数据文件,长度总是20个字节,记录3个信息:偏移量 & 事务操作数量 & 当前代
图2
什么时候删?
在f