首页 > 其他分享 >Elasticsearch 如何保证写入过程中不丢失数据的

Elasticsearch 如何保证写入过程中不丢失数据的

时间:2024-03-12 18:34:53浏览次数:26  
标签:index translog 写入 buffer Elasticsearch 丢失 数据 ES

丢失数据的本质

在本文开始前,首先明白一个点,平时我们说的组件数据不丢失究竟是在指什么,如果你往ES写入数据,ES返回给你写入错误,这个不算数据丢失。如果你往ES写入数据,ES返回给你成功,但是后续因为ES节点重启或宕机导致写入的数据不见了,这个才叫数据丢失。

简而言之,丢失数据的本质是ES本身搞丢了返回结果是成功写入的数据

数据写入流程

image.png

1,写入时,ES会首先往一块内存缓存中写入数据,这快内存缓存在ES中叫index buffer,此时数据是不可见的,只有经过refresh操作后,数据才能变得可见。

index buffer的大小设置可以通过 下面的请求去进行设置,如下,设置了index buffer的大小为总内存的30%

PUT /_cluster/settings
{
   "persistent" : {
       "indices.memory.index_buffer_size" : "30%"  
   }
}

2, 在写入index buffer成功后,会写translog 记录写入的数据。此时数据依然不可见。由于操作系统对文件写入,并不会立即落盘。所以ES提供了关于刷盘的配置,index.translog.durability两个选项值,如下,

  • request 会在每次创建segment写入数据后就对translog进行刷盘操作。
  • async 则会定时对translog进行刷盘操作。定时刷新到磁盘的周期是通过index.translog.sync_interval 参数去进行控制,默认是5s。

3,refresh 操作可以主动触发也可以定时触发,默认是1s会进行一次, 该操作会创建一个lucece的segment段用于存储新写入到index buffer中的数据,注意这里即使写入到了segment里,数据还是在os Cache系统文件系统缓存中,并没有落入磁盘,只有 在lucece将数据 commit 到磁盘后,数据才能落盘。

4, 在文件系统缓存中的segment总归还是要写入磁盘,默认每30分钟,或者当translog的日志量达到某个量级时,segment会进行落盘,同时删掉translog日志。这个量级由index.translog.flush_threshold_size 去进行控制,默认是512mb。

在了解了ES的写入数据的过程后,我们可以发现,如果将index.translog.durability 设置为request ,这样便能让每次请求返回客户端成功时,保证一定会有translog日志存储到磁盘上,后续如果在系统缓存中的segment因为系统宕机而没有落盘依然能够通过translog去进行恢复。

而如果index.translog.durability 设置为 async 则有可能会丢失5s的数据。

标签:index,translog,写入,buffer,Elasticsearch,丢失,数据,ES
From: https://www.cnblogs.com/hobbybear/p/18068975

相关文章

  • ELK日志实时分析平台搭建和使用 ELK日志分析平台是指Elasticsearch、Logstash 和 Kiba
    ELK日志实时分析平台搭建和使用ELK日志分析平台是指Elasticsearch、Logstash和Kibana三个项目的集合,后面又增加了Filebeat数据采集器。概述ELK日志分析平台是指Elasticsearch、Logstash和Kibana三个项目的集合,后面又增加了Filebeat数据采集器。Elasticsearch是一个数据......
  • docker部署单机版elasticsearch7
    拉取镜像dockerpulldocker.elastic.co/elasticsearch/elasticsearch:7.17.18创建本地数据、配置文件夹,修改权限sudomkdir-p/server/es7/config/server/es7/data/server/es7/logs/server/es7/pluginssudochmod777/server/es7/config/server/es7/data/server/es7/......
  • ElasticSearch架构介绍及原理解析
    前言在当今大数据时代,数据的快速增长使得有效地管理、检索和分析数据成为企业发展的关键。Elasticsearch(以下简称ES)作为一种开源的分布式搜索和分析引擎,在这个领域中扮演着重要的角色。它不仅仅只是全文搜索,还支持结构化搜索、数据分析、复杂的语言处理、地理位置和对象间关联关......
  • Logstash接收udp/tcp数据 python+ udp/tcp +logstash +elasticsearch
    Logstash接收udp/tcp数据背景:在 Logstash数据源为日志文件操作 基础上进行一、配置文件1.D:\usr\local\etc\logstash\pipeline1目录下logstash.conf文件配置input{stdin{}udp{host=>"0.0.0.0"#从5000端口获取日志port=>5000......
  • go 序列化反序列化之后时区信息丢失
     编写了获取当前datetime时间的方法如下//GetCurrentDateString获取当天的时间datefuncGetCurrentDateString()time.Time{//获取当前时间currentTime:=time.Now().Local()//格式化日期为字符串dateString:=currentTime.Format(time.DateTime......
  • Windows Server 2012R2 丢失api-ms-win-crt-runtime-l1-1-0.dll
    在网上搜索了很久,没有现成的帖子可以解决。安装补丁不是提示“一个或多个问题导致了安装失败”就是此更新不适用于你的计算机。最终在微软官网读到补丁安装要遵守一个顺序,在此特地把解决过程分享出来,希望能帮助到苦于搜索的人报错信息 无法启动此程序,因为计算机中丢失api-ms......
  • Elasticsearch
    目录Elasticsearch简介存储结构索引-index文档类型-type文档-document文档字段-field映射-mapping类比MySQL存储结构文档CURD文档元数据插入文档查询文档更新文档删除文档文档类型定义精确值&全文类型自动映射自定义文档的数据类型查询索引的映射规则查询SearchAPIQueryDSL基......
  • docker安装elasticsearch
    1.dockernetworkcreatees-net2.dockerpullelasticsearch:8.6.03.mkdir-p/usr/local/es/data/usr/local/es/config/usr/local/es/plugins4.chmod777/usr/local/es/datachmod777/usr/local/es/configchmod777/usr/local/es/plugins5.配置config/elasticsear......
  • c# 透明png 写入文字
    stringfileame="c:/test.png";//图片文字stringstr=DateTime.Now.ToString("yyMMddHHmmss");Bitmapimage=newBitmap(600,400);Graphicsg=Graphics.FromImage(image);//填充透明色......
  • elasticsearch常用请求接口Rest API示例
    创建shopping索引PUT/shopping查看全部索引GET/_cat/indices查看指定索引GET/shopping删除指定索引DELETE/shopping索引的映射字段属性,是否关键字和加入索引PUT/shopping/_mapping{"properties":{"title":{"type":"text"},&qu......