ElasticSearch搜索引擎:数据的写入流程
一、ElasticSearch 写数据的总体流程:
(1)ES 客户端选择一个节点 node 发送请求过去,这个节点就是协调节点 coordinating node
(2)协调节点对 document 进行路由,通过 hash 算法计算出数据应该落在哪个分片shard 上,然后根据节点上维护的 shard 信息,将请求转发到对应的实际处理节点node上
shard = hash(document_id) % (num_of_primary_shards),
(3)实际的节点上的primary shard 主分片处理请求,然后将数据同步到副本节点replica node
(4)coordinating node 等到primary node 和所有 replica node 都执行成功之后,就返回响应结果给客户端。
二、ES 的主分片写数据的详细流程:
1、refresh 操作:
primary shard 主分片先将数据写入 memory buffer,然后定时(默认每隔1s)将memory buffer 中的数据写入一个新的 segment 文件中,并进入Filesystem cache(同时清空 memory buffer),这个过程就叫做 refresh;每个 Segment 文件实际上是一些倒排索引的集合, 只有经历了 refresh 操作之后,这些数据才能变成可检索的。
ES 的近实时性:当数据存在 memorybuffer 时是搜索不到的,只有数据被 refresh 到Filesystem cache 之后才能被搜索到,而 refresh 是每秒一次,所以称 es 是近实时的,或者可以通过手动调用es 的 api 触发一次 refresh 操作,让数据马上可以被搜索到;
上文讲到的memory buffer,也称为 Indexing Buffer,这个区域默认的内存大小是10% heap size。
2、写 translog 事务日志文件:
由于memoryBuffer 和 Filesystem Cache 都是基于内存,假设服务器宕机,那么数据就会丢失,所以 ES 通过 translog 日志文件来保证数据的可靠性,在数据写入memory buffer 的同时,将数据写入 translog 日志文件中,在机器宕机重启时,es 会从磁盘中读取 translog 日志文件中最后一个提交点 commit point 之后的数据,恢复到 memorybuffer 和 Filesystem cache 中去。
ES 数据丢失的问题:translog 也是先写入 Filesystem cache,然后默认每隔 5 秒刷一次到磁盘中,所以默认情况下,可能有 5 秒的数据会仅仅停留在memorybuffer 或者 translog 文件的 Filesystem cache中,而不在磁盘上,如果此时机器宕机,会丢失 5 秒钟的数据。也可以将 translog 设置成每次写操作必须是直接 fsync 到磁盘,但是性能会差很多。
3、flush 操作:
不断重复上面的步骤,translog 会变得越来越大,当 translog 文件默认每30分钟或者阈值超过 512M 时,就会触发 flush 操作,将 memory buffer 中所有的数据写入新的 Segment 文件中, 并将内存中所有的 Segment 文件全部落盘,最后清空translog 事务日志。
- (1)将 memory buffer 中的数据 refresh 到 Filesystem Cache中的一个新的 segment 文件中去,然后清空memory buffer;
- (2)创建一个新的 commit point(提交点),同时强行将 Filesystem Cache 中目前所有的数据都 fsync 到磁盘文件中;
- (3)删除旧的translog 日志文件并创建一个新的translog 日志文件,此时 flush 操作完成
ES的 flush 操作主要通过以下几个参数控制:
- index.translog.flush_threshold_period:每隔多长时间执行一次flush,默认30m
- index.translog.flush_threshold_size:当事务日志大小到达此预设值,则执行flush,默认512mb
- index.translog.flush_threshold_ops:当事务日志累积到多少条数据后flush一次。
ElasticSearch搜索引擎:数据的写入流程相关推荐
- Elasticsearch大数据量写入调优和原理解析
前言 千万.亿级别数据批量写入ES的调优和原理解析 Elasticsearch version (bin/elasticsearch --version): 7.8 Plugins installed ...
- 大数据_Hbase-(数据写入流程)---Hbase工作笔记0009
技术交流QQ群[JAVA,C++,Python,.NET,BigData,AI]:170933152 上一节咱们详细的说了,hbase如何去读数据,读数据的原理. 咱们知道hbase,不能实现即席查询 ...
- ElasticSearch搜索引擎: 内存分析与设置
在 Elasticsearch 的运行过程中,如何合理分配与设置内存是一件十分重要的事情,否则十分容易出现各种问题. 一.Elasticsearch为什么吃内存: 我们先看下 ES 服务器的总体内存消 ...
- ElasticSearch搜索引擎常见面试题总结
一.ElasticSearch基础: 1.什么是Elasticsearch: Elasticsearch 是基于 Lucene 的 Restful 的分布式实时全文搜索引擎,每个字段都被索引并可被搜索 ...
- ElasticSearch倒排索引原理 数据的写入与查询过程
Elasticsearch在生产中充当的角色 业务上,最早启用Elasticsearch(下称ES)是为了解决模糊查询的问题.具体业务场景为大量抓取回来的短视频内容.热门微博.公众号文章.小红书笔记. ...
- 一步一步学爬虫(4)数据存储之Elasticsearch搜索引擎存储
Elasticsearch搜索引擎存储 1. Elasticsearch 介绍 2. Elasticsearch 相关概念 3. 准备工作 3.1 下载程序 3.2 解压缩,配置文件修改 4. 创建索 ...
- php操作ElasticSearch搜索引擎流程详解
更多python.php教程请到友情连接: 菜鸟教程https://www.piaodoo.com 茂名一技http://www.enechn.com ppt制作教程步骤 http://www.tpy ...
- HBase - 数据写入流程解析
本文由 网易云 发布. 作者:范欣欣 本篇文章仅限内部分享,如需转载,请联系网易获取授权. 众所周知,HBase默认适用于写多读少的应用,正是依赖于它相当出色的写入性能:一个100台RS的集群可以轻 ...
- 【Elasticsearch】Elasticsearch 优化写入流程实现NRT近实时(filesystem cache,refresh)
现有流程的问题,每次都必须等待fsync将segment刷入磁盘,才能将segment打开供search使用,这样的话,从一个document写入,到它可以被搜索,可能会超过1分钟!!!这就不是近实时 ...
- hfds_HFDS的数据写入流程
1.HFDS的数据写入流程的基本参数 首先了解数据写入过程中,什么是block, packet, chunk 1.block:数据块,当上传的文件太大时, 就需要分块,一个块默认设置时128M, 在客 ...
最新文章
- 编程软件python中的if用法-适合Python初学者的一些编程技巧
- search strategies
- FFmpeg再学习 -- Windows下安装说明
- 选择结构_标准的switch语句
- 第九周项目6-穷举法之年龄几何
- Project查看资源分配情况
- 使用.NET进行高效率互联网敏捷开发的思考和探索【一、概述】
- 截至11日14时37分,“11.11京东全球好物节”累计下单金额突破1794亿元
- goldendict设置使用vlc或mplayer发音
- dwz怎么使用数据加载中提示_SOLIDWORKS在使用中提示内存不足怎么办?
- 事件冒泡、事件捕获、事件委托
- Bootstrap 按钮的使用
- Numpy 学习笔记 ——IndexingSlicing 几点心得
- wine模拟器linux,Wine模拟器使用手册(转)
- dcs常用的冗余方式_冗余技术在DCS平台应用分析
- Nofollow标签的写法以及nofollow使用介绍
- 谷歌浏览器崩溃之错误代码:RESULT_CODE_MISSING_DATA
- 手机怎么把照片转JPG格式?这两种方法可以迅速转换
- JS拖拽效果,代码精干,通俗易懂!
- 接入阿里云短信,OSS,实人认证