Elasticsearch官方文档翻译-事务日志
作者:互联网
本系列文章翻译ES官方8.0版本文档。本章对应内容地址 Translog
因为水平有限,翻译内容难免存在错漏,欢迎大家指出
事务日志
对Lucene 的修改只会在Lucene 提交期间保存到磁盘进行持久化,这是一个代价较大的操作,因此不应对每一个写入或删除操作实时提交到Lucene执行。再两个提交之间的修改如果因为程序退出或硬件故障导致失败,那么Lucene会取消这个修改。
对每一个修改都单独的提交到Lucene执行需要付出很大的代价,因此每个分片会将修改的请求先写入到事务日志文件中。索引的写入和删除操作在缓存的Lucene被执行且确认后会写入到事务日志,当因为一些原因分片需要被恢复时可以对事务日志中已经被确认但是不包含在上一次提交的操作进行重放。
每一个Elasticsearch fush操作都是执行一次Lucene提交,该操作会重新产生一个新的事务日志。fush操作在后台定时执行以确保事务日志不会增长的过大导致在恢复分片时因为要重放其中的操作而花费过长的时间。同时Elasticsearch 也提供了手动fush的API,虽然很少会用到它。
事务日志相关配置
只有当事务日志被fsync和提交后,其中的操作才会持久化到磁盘。如果因为硬件,操作系统故障,JVM奔溃或分片操作失败导致操作未被执行且没有写入到事务日志,那么这部分的操作将会丢失。
默认情况下index.translog.durability的配置值为request,也就是Elasticsearch 对所有的写入,更新,删除和批量操作在成功写入到主分片和副本分片的事务日志后即返回成功给客户端。如果设置index.translog.durability为async,那么Elasticsearch 对事务日志的落盘将会以定时的方式执行,每个index.translog.sync_interval时间执行一次,因此如果出现故障,那么在下一次落盘之前的操作将会丢失。
下面的参数可以为每个索引动态的设置
- index.translog.sync_interval 对事务日志进行提交的时间间隔。默认为5m,小于100ms一下的值无效。
- index.translog.durability 是否在每次的修改操作后都对事务日志进行提交。
- request(默认)每一个修改操作都会记录到事务日志并进行提交。该模式能保证在故障时所有被确认的操作都记录到事务日志并落盘。
- async 每个sync_interval的时间对事务日志进行提交。该模式在故障时,在下一次事务日志进行提交的操作将会丢失。
- index.translog.flush_threshold_size 事务日志中保存着Lucene未安全落盘的操作,这些改动是可读,并且在分片恢复时会重发事务日志中的操作。本配置项控制事务日志的最大尺寸,防止恢复阶段执行重发时间过长。一旦日志文件达到设定值,就会触发flush操作,生成一个新的Lucene提交点。默认大小512m
标签:事务,分片,Lucene,文档,提交,操作,Elasticsearch,日志 来源: https://www.cnblogs.com/qqfde/p/15906228.html