你的浏览器禁用了JavaScript, 请开启后刷新浏览器获得更好的体验!
输入关键字进行搜索
搜索:
没有找到相关结果
medcl - 今晚打老虎。
赞同来自: laoyang360 、liyc98
yayg2008
赞同来自: shjdwxy 、thewind
kennywu76 - Wood
赞同来自: laoyang360
ESWorker
赞同来自:
laoyang360 - 《一本书讲透Elasticsearch》作者,Elastic认证工程师 [死磕Elasitcsearch]知识星球地址:http://t.cn/RmwM3N9;微信公众号:铭毅天下; 博客:https://elastic.blog.csdn.net
liyc98 - 80後,IT男
要回复问题请先登录或注册
80後,IT男
6 个回复
medcl - 今晚打老虎。
赞同来自: laoyang360 、liyc98
不过在6.0之后,为了实现 SequenceIDs 机制,translog 不再被立即清除,而是会保留在本地,并按大小和过期时间进行定期清理。默认512MB 大小和 12 小时的时间窗口,注意分片的磁盘占用会变大。
另外现在默认的参数为了数据一致性,是每次写操作会主动调用一次 fsync,这个是有开销的,会影响索引速度,可以修改参数 index.translog.durability 为 async,风险自理,可参见文档:https://www.elastic.co/guide/e ... tings
yayg2008
赞同来自: shjdwxy 、thewind
translog记录的是已经在内存生成了segments但是还没写到磁盘的那些索引操作,此时新写入的数据可以被搜索到,但是当节点挂掉后segments的数据会丢失,需要从trangslog恢复。
相应的,translog的写入也可以设置,默认是request,每次请求都会写入磁盘(fsync),这样就保证所有数据不会丢,但写入性能会受影响;如果改成async,则按照配置触发trangslog写入磁盘,注意这里说的只是trangslog本身的写盘。
translog什么时候清空?默认是512mb,或30分钟。这个动作就是flush,同时伴随着segment提交(写入磁盘)。flush之后,这段translog的使命就完成了,因为segment已经写入磁盘,就算故障,也可以从segment文件恢复。
另外,有一个/_flush/sync命令,在做数据节点维护时很有用。其逻辑就是flush translog并且将sync_id同步到各个分片。可以实现快速恢复。
综述:fsync指的是translog本身被写入磁盘的动作;flush指的是逻辑上的刷新,包含一系列逻辑操作。
节点恢复相关的,有兴趣可以查看:https://zhuanlan.zhihu.com/p/35225828
kennywu76 - Wood
赞同来自: laoyang360
ESWorker
赞同来自:
而fsync,我个人的理解是将translog文件同步写入磁盘的过程。它的出发条件很多,所以间隔要小,才能防止数据丢失。
其实flush API的作用是强制停止translog的fsync行为,提交segment并清除translog。间隔要尽量大一点(需要优化写速度的话,就稍微调大一点flush间隔。)
所以fsync行为是translog平时进行的持久化行为,而flush只是一种强制行为,一般手动执行的话,是在关闭节点前进行的,确保数据全部写入磁盘。
虽然这两种方式都在操作translog,但理解起来要从作用出发,而不是关注translog。
纯属个人理解,希望对你有所帮助。
laoyang360 - 《一本书讲透Elasticsearch》作者,Elastic认证工程师 [死磕Elasitcsearch]知识星球地址:http://t.cn/RmwM3N9;微信公众号:铭毅天下; 博客:https://elastic.blog.csdn.net
赞同来自:
liyc98 - 80後,IT男
赞同来自: