ElasticSearch——刷盘原理流程

news2024/11/15 9:49:00

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设置为百分比,则可以用此设置指定绝对最小值,默认无限制

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/108424.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【JavaEE】Java 线程的几种状态

目录 一、线程状态的种类及含义 二、线程状态间的切换条件 (1)使用isAlive()判断线程的存活状态 (2)关于BLOCKED、WAITING、TIMED_WAITING状态之间的转换 1.TIMED_WAITING 2.WAITING 3.BLOCKED 4.jconsole.exe的使用方式…

当 chatGPT 被职场 PUA ,笑麻了!

大家最近是不是被 chatGPT 刷屏了?简单来说,chatGPT 是一个智能聊天引擎。 那 chatGPT 和小爱同学、 siri 有什么区别呢? 如果体验过的朋友,能感受到区别还是很大,chatGPT 的智能表现过于优秀,远远超过了这…

【C++】STL-string模拟实现

文章目录驼峰法命名面试题:写一个简洁版的stringstring成员变量构造函数析构函数拷贝构造函数获取C形式的字符串 c_str赋值重载 operator简易版代码:string的改造 ->支持增删查改接口总览string成员变量构造函数交换拷贝构造赋值重载operator析构函数返回元素个数…

Python图像识别实战(四):搭建卷积神经网络进行图像二分类(附源码和实现效果)

前面我介绍了可视化的一些方法以及机器学习在预测方面的应用,分为分类问题(预测值是离散型)和回归问题(预测值是连续型)(具体见之前的文章)。 从本期开始,我将做一个关于图像识别的…

大疆A3飞控使用|飞控配置

大疆A3飞控使用|飞控配置大疆A3飞控介绍总体特性飞行特性外围设备保护功能SDK拓展拓展功能A3 飞控使用配置连接飞机基本设置机架安装遥控器电调动力配置感度电池控制参数调试基础感度动力带宽高级感度灵敏度控制器性能参数大疆A3飞控介绍 全新A3系列飞控系统结合安全可靠和精准…

【虹科案例】用于超高磁场的虹科 digitizerNETBOX——高采样率和完全同步采样

应用背景 国际 MegaGauss 科学实验室是东京大学固态物理研究所 (ISSP) 的一部分。实验室的目的是研究固态材料(如半导体、磁性材料、金属、绝缘体、超导材料)在超高磁场下的物理特性,这些领域还包括研究新材料并控制其阶段和功能。实验室脉冲…

百度工程师带你体验引擎中的nodejs

作者 | 糖果candy 导读 如果你是一个前端程序员,你不懂得像PHP、Python或Ruby等动态编程语言,然后你想创建自己的服务,那么Node.js是一个非常好的选择。 Node.js 是运行在服务端的 JavaScript,如果你熟悉Javascript,那…

【Kotlin 协程】Flow 异步流 ③ ( 冷流 | 流被收集时运行 | 流的连续性 )

文章目录一、冷流 ( 流被收集时运行 )二、流的连续性一、冷流 ( 流被收集时运行 ) Flow 异步流 的 构建器函数 flow 函数 中的 代码 , 在 调用 Flow#collect 函数 时 , 也就是在 Flow 异步流 收集元素时 , 才会 执行 flow 构建器 中的代码 ; 这种机制的异步流 称为 冷流 ; 代…

移动WEB开发之响应式布局--Bootstrap栅格系统

栅格系统简介 栅格系统英文为“grid systems”,也有人翻译为“网格系统”,它是指将页面布局划分为等宽的列,然后通过列数 的定义来模块化页面布局。 Bootstrap 提供了一套响应式、移动设备优先的流式栅格系统,随着屏幕或视口(vi…

spring-statemachine状态机梳理

目录 一、基本回顾 1、为什么要用状态机 2、什么是状态机 3、状态机可归纳为4个要素 4、对应Spring StateMachine的核心步骤 5、简单例子 添加maven依赖 定义状态枚举和事件枚举 完成状态机的配置 简单测试一下 添加Listener 监听器,当状态变更时,触发方…

1. SpringMVC概述与入门

1. SpringMVC简介 SpringMVC是一种基于Java实现MVC模型的轻量级Web框架优点 使用简单,开发便捷(相比于Servlet)灵活性强 2. 入门案例 2.1 实现步骤分析 1 创建web工程(Maven结构) 2 设置tomcat服务器,加…

Qt属性系统(Qt Property System)

Qt提供了巧妙的属性系统,它与某些编译器支持的属性系统相似。然而,作为平台和编译器无关的库,Qt不能够依赖于那些非标准的编译器特性,比如__property 或者 [property]。Qt的解决方案能够被任何Qt支持的平台下的标准C编译器支持。它…

Kafka工作流程简介

消息传递模式简介: 一个消息系统负责将数据从一个应用程序传递到另外一个应用程序中,应用程序只关注数据,无需关注数据在多个应用之间是如何传递的。 分布式消息传递基于可靠的消息队列,在客户端应用和消息系统之间异步传递消息。 消息传递有…

MySQL面试常问问题(日志) —— 赶快收藏

目录 1.MySQL日志文件有哪些?分别介绍下作用? 2.binlog和redo log有什么区别? 3.一条更新语句怎么执行的了解吗? 4.那为什么要两阶段提交呢? 5.redo log怎么刷入磁盘的知道吗? 1.MySQL日志文件有哪些&…

Typora配合PicGo阿里云图床配置

写博客的时候,刚开始直接在各大平台上直接写,后来还是觉得不太方便,需要在各大平台之间来回切换。于是就改用Typora,但是有个问题就是图片的处理,只能放在本地。想要发布到各大平台,就需要图床。本文结合阿…

2022年安徽最新水利水电施工安全员模拟试题及答案

百分百题库提供水利水电施工安全员考试试题、水利水电施工安全员考试预测题、水利水电施工安全员考试真题、水利水电施工安全员证考试题库等,提供在线做题刷题,在线模拟考试,助你考试轻松过关。 15.围堰工程可以直接判定为生产安全重大事故隐…

【UE4 第一人称射击游戏】02-玩家健康和护甲

步骤: 1.在“ThirdPersonCharacter”中添加两个浮点变量“Health”和“Armor” 将默认值设为1.0,表示默认100% 2.新建一个控件蓝图,命名为“FPSHUD” 打开“FPSHUD”,添加两个进度条,分别表示当前的生命值和护甲量 调…

InnoDB架构体系

2、InnoDB架构体系 2.1、内存结构 2.1.1、buffer pool InnoDB内存缓存区,使用空间换时间的思想,给数据做了一个缓存。把热点的数据存储在内存中,减少IO次数,提高效率。 show variables like %innodb_buffer_pool%;buffer pool …

基于polar码和SCMA的多用户检测的联合检测译码matlab仿真,polar采用SCAN软译码,SCMA用MPA算法

目录 1.算法描述 2.仿真效果预览 3.MATLAB核心程序 4.完整MATLAB 1.算法描述 构造的核心是通过信道极化(channel polarization)处理,在编码侧采用方法使各个子信道呈现出不同的可靠性,当码长持续增加时,部分信道将…

【C语言】初阶习题

目录 1.图案问题 2、时分秒转换 3、打印1-100之间所有3的倍数的数字 4、打印100~200之间的素数 5、给定两个数,求这两个数的最大公约数 6、在屏幕上输出9*9乘法口诀表 7、计算1/1-1/21/3-1/41/5 …… 1/99 - 1/100 的值,打印出结果 8、二分查找 …