六十七、Elasticsearch内核原理-继续优化写入流程实现
2017-07-12 本文已影响241人
编程界的小学生
1、完整的优化写入流程步骤
(1)数据写入buffer缓冲和translog日志文件
(2)每个1s,buffer中的数据被写入新的segment file,并进入os cache,此时segment就被打开并供search使用
(3)buffer被清空
(4)重复1~3,新增segment不断添加,buffer不断清空,而translog中的数据不断累加
(5)当translog长度达到一定程度的时候,commit操作发生
- (5-1)buffer中的所有数据写入一个新的segment,并写入os cache,打开供使用
- (5-2)buffer被清空
- (5-3)一个commit point被写入磁盘,标明了所有的index segment
- (5-4)filesystem cache中的所有index segment file缓存数据,被fsync强行刷到磁盘上
- (5-5)现有的translog被清空,创建一个新的translog
2、图解
Paste_Image.png3、基于translog和commit point,如何进行数据恢复?
fsync+清空translog,就是flush,默认每隔30分钟flush一次,或者当translog过大的时候,也会自动flush。
Paste_Image.png手动flush的方法:
POST /my_index/_flush
一般别手动flush,让ES自动flush就好了。
4、其他
translog每隔5s被fsync一次到磁盘上,在一次增删改操作之后,当fsync在primary shard 和 replica shard都成功之后,那次增删改操作才会成功,但是这种在一次增删改时强行fsync translog可能会导致部分操作比较耗时,当允许部分数据丢失的话,建议设置异步fsync translog
PUT /my_index/_settings
{
"index.translog.durability": "async",
"index.translog.sync_interval": "5s"
}
若有兴趣,欢迎来加入群,【Java初学者学习交流群】:458430385,此群有Java开发人员、UI设计人员和前端工程师。有问必答,共同探讨学习,一起进步!
欢迎关注我的微信公众号【Java码农社区】,会定时推送各种干货:
qrcode_for_gh_577b64e73701_258.jpg