ElasticSearch——刷盘原理流程

  • 刷盘原理流程
    • 名词和操作解释
    • 相关设置

刷盘原理流程

整个过程会分成几步:

  1. 数据会同时写入buffer缓冲区translog日志文件
  2. buffer缓冲区满了或者到时间了(默认1s),就会将其中的数据转换成新的segment并写入系统文件缓存,这一步叫 refresh
  3. 其中后台会自动合并小的segment成大的segment; 这一步叫段合并
  4. translog达到大小的阈值(默认512M)或者flush默认时长(30m),则会执行flush操作:
    • 内存中数据写入新的segment放入缓存(清空内存区)
    • 一个commit point写入磁盘,表示哪些segment已写入磁盘
    • 将缓存的segement写入磁盘(fsync命令)
    • 清空旧的translog(因为没用了)

5.translog日志文件也需要持久化到磁盘:

  • 同步刷盘:每次修改操作完成后立刻执行fsync命令刷盘
  • 异步刷盘:默认每5s执行fsync命令刷盘

名词和操作解释

  • index Buffer 是ES内存中的一部分;OS 系统文件缓存是操作系统的,不属于ES内存

  • refresh操作:定时将ES缓冲区的数据转换成segment并写入系统文件缓存的过程(默认1s一次);因为数据只有到了系统文件缓存才能被搜索到,这个延迟也是ES被称为近实时搜索的原因

  • translog:日志文件,因为不管是ES缓冲区还是系统文件缓存只要没到磁盘,一旦服务器宕机,数据就丢失了,所以有了translog日志文件,因为该文件是顺序写入所以开销不大,默认是同步刷盘,还可以设置成异步的(默认5s刷盘一次)

  • flush:因为上述的数据只是到了系统文件缓存,虽然有translog的持久化保证数据的不丢失,但translog会越来越大,文件越大一旦宕机恢复的时候不是越麻烦?所以数据本身的持久化和translog文件清理的机制就叫flush,它会将系统文件缓存中的segment数据持久化到磁盘,同时清除旧的translog,默认30分钟一次或者translog大小达到512M阈值,有以下几步:

    1.内存中数据写入新的segment放入缓存(清空内存区)

    2.一个commit point写入磁盘,表示哪些segment已写入磁盘

    3.将缓存的segement写入磁盘(fsync命令)

    4.清空旧的translog(因为没用了)

  • fsync:这个可能是很多人理解错的地方,这个只是个系统命令,一个将系统文件缓存中的数据持久化到磁盘的命令,所以flush在持久化segment段数据的时候会调用,同时translog持久化到磁盘的时候也会调用

  • segment file:一个存储了倒排索引的文件,搜索也会按照段来搜索

  • 段合并:由于refresh会创建一个新的段 ,这样会导致短时间内的段数量暴增。而段数目太多会带来较大的麻烦。 每一个段都会消耗文件句柄、内存和 cpu 运行周期。更重要的是,每个搜索请求都必须轮流检查每个段;所以段越多,搜索也就越慢。Elasticsearch 通过在后台进行段合并来解决这个问题。小的段被合并到大的段,然后这些大的段再被合并到更大的段。段合并的时候会将那些旧的已删除文档从文件系统中清除。被删除的文档(或被更新文档的旧版本)不会被拷贝到新的大段中。

  • commit point:记录当前所有可用的segment,会维护一个.del文件(es删除的时候会先在.del文件中声明某个document被删除了,此时该document还是可以被查询出的,但是返回结果的时候会根据commit point维护的.del文件将被删除的document过滤掉)

相关设置

  • index.refresh_interval:refresh刷新频率,默认1s一次,可以设置为-1为禁用
  • index.translog.durability
    • request:同步刷盘(默认)
    • async:异步刷盘
  • index.translog.sync_interval:translog异步刷盘间隔时间;默认5s一次
  • index.translog.flush_threshold_size:当translog的大小达到此值时会进行一次flush操作。默认是512m
  • index.translog.flush_threshold_period:在指定的时间间隔内如果没有进行flush操作,会进行一次强制flush操作。默认是30分钟
  • index Buffer 大小设置
    • indices.memory.index_buffer_size:接受百分比或字节大小值,默认为10%,意味着分配给node的总内存的10%用于索引缓冲区
    • indices.memory.min_index_buffer_size:如果将index_buffer_size设置为备份比,则可以用此设置指定绝对最小值,默认为48mb
    • indices.memory.max_index_buffer_size:如果将index_buffer_size设置为百分比,则可以用此设置指定绝对最小值,默认无限制

ElasticSearch——刷盘原理流程相关推荐

  1. mysql部署策略_MySQL延迟问题和数据刷盘策略流程分析

    一.MySQL复制流程 官方文档流程如下: MySQL延迟问题和数据刷盘策略 1.绝对的延时,相对的同步 2.纯写操作,线上标准配置下,从库压力大于主库,最起码从库有relaylog的写入. 二.My ...

  2. mysql数据刷盘过程详解_MySQL延迟问题和数据刷盘策略流程分析

    一.MySQL复制流程 官方文档流程如下: MySQL延迟问题和数据刷盘策略 1.绝对的延时,相对的同步 2.纯写操作,线上标准配置下,从库压力大于主库,最起码从库有relaylog的写入. 二.My ...

  3. mysql刷盘命令_MySQL延迟问题和数据刷盘

    导读 这篇文章主要介绍了MySQL延迟问题和数据刷盘策略流程分析,本文要给大家提到了mysql复制流程,需要的朋友可以参考下 一.MySQL复制流程 官方文档流程如下: MySQL延迟问题和数据刷盘策 ...

  4. RocketMQ消息存储之刷盘机制(原理篇)

    一.前言 RocketMQ的刷盘机制是一种确保消息可靠性的机制,简单来说就是Broker收到消息后,将消息存储到磁盘上.这样可以解决几个问题: 存储空间问题.内存空间有限,存入磁盘可以维护更多消息. ...

  5. RocketMQ刷盘流程

    前言 这里推荐两个看源码较好用的快捷键,可以提高源码阅读效率(win10系统): 1. ctrl + alt + h:查看方法的调用链 2. ctrl + h:查看类的继承关系和接口实现关系 简介 消 ...

  6. MySQL脏页刷盘流程

    1. 什么是脏页 InnoDB更新语句,是先查询到指定记录到内存缓冲区,然后更新内存缓冲区数据,再写redo log.并不会立即将数据页刷新到磁盘上.这样就会导致内存数据页和磁盘数据页的数据不一致的情 ...

  7. Elasticsearch 分布式架构原理

    前言 前面介绍了很多ES使用过程中的具体实战知识点,本文主要是谈谈ES分布式架构原理. 一.Elasticsearch特点 elasticsearch是近实时的分布式搜索分析引擎,底层实现基于Luce ...

  8. Elasticsearch分布式一致性原理剖析(三)-Data篇

    前言 "Elasticsearch分布式一致性原理剖析"系列将会对Elasticsearch的分布式一致性原理进行详细的剖析,介绍其实现方式.原理以及其存在的问题等(基于6.2版本 ...

  9. RocketMQ5.0.0消息存储<四>_刷盘机制

    目录 一.刷盘概览 二.Broker刷盘机制 1. 同步刷盘 2. 异步刷盘 1):未开启堆外内存池 2):开启堆外内存池 三.参考资料 一.刷盘概览 RocketMQ存储与读写是基于JDK NIO的 ...

最新文章

  1. windows下 composer常见问题及处理
  2. Explain:解决MUI 软键盘弹起挤压页面问题
  3. 入门 | 如何为你的回归问题选择最合适的机器学习方法?
  4. MySQL 数据库热备的操作
  5. 【OpenCV 例程200篇】67. 空间域图像增强的综合应用
  6. fft谱分析的误差有哪些原因造成的?如何减小分析误差。_频谱分析仪25问
  7. Atitit SpringCache缓存使用 艾提拉 attilax总结 1. Spring的抽象已经做得够好了,适合于大多数场景,非常复杂的就需要自己AOP实现了。 1 1.1. 设置配置文件支持
  8. Python 读取5张Excel的Sheet自动生成3张Sheet分析结果(减轻同事的工作量,让原本大约2个小时的工作量缩减到1分钟内)
  9. 不用验证,下载wmp10
  10. redis cluster master failover问题
  11. CHAP7 软件项目进度计划
  12. [Alg]排序算法之分布排序
  13. Kutools for Excel 结合 300 多种高级功能和工具
  14. 6 zzuliPTA家庭土地管理
  15. python第三方库re库基本介绍
  16. Groovy(Java笨狗)系列--fields and local variables
  17. TS协议解析第三部分(PES)
  18. java计算机毕业设计心理学网站源程序+mysql+系统+lw文档+远程调试
  19. 打印二维、多行的PDF-417条形码控件PDF417 Fonts and Encoder
  20. zblog php 火车头,ZBLOG PHP版火车头采集器免登录文章发布模块使用记录

热门文章

  1. 逼真版仿英雄联盟纯html+css+jqueryLOL网页版
  2. 惠普星11x2二合一平板电脑评测
  3. 2021年起重机械指挥模拟考试及起重机械指挥模拟考试题
  4. 通用QBASIC语言的基本语句
  5. 最牛X的一行代码:让你的支付宝余额变亿!
  6. c语言数据库专业特长怎么写,计算机专业的特长怎么写
  7. Python-opencv一键批量制作部门聘书(导入名单并在图片模板上加文字)
  8. 联想笔记本摄像头被禁用
  9. java版飞鸽传书源代码
  10. 因【金刚石刀具】种类很多,故被广泛应用