ES数据插入和查询流程是怎么样的?

标签: | 发表时间:2020-07-13 15:47 | 作者:
出处:https://mp.weixin.qq.com

ES集群的状态有哪些,为什么主分片数目是固定的,副本分片却能动态调节,快看看这些关于ES的问题你都知道吗?

1. ES集群的状态

  • green 最健康的状态,说明所有的分片包括备份都可用

  • yellow 基本的分片可用,但是备份不可用(或者是没有备份)

  • red 部分的分片可用,表明分片有一部分损坏。此时执行查询部分数据仍然可以查到,遇到这种情况,还是赶快解决比较好

2. ES主分片数目为什么索引创建的时候就要确定?主分片数目如何确定

ES根据数据ID路由到分片方式为: shard = hash % primary_shard_num 。因此主分片的数目必须在索引创建之前确定好。
由于新加入节点,ES会自动对节点进行负载均衡,因此,主分片的数目主理想的数目是每个节点上一个主分片,数目与节点个数一样。

3. 新节点加入,节点故障会发生什么

新节点加入, Elasticsearch 将自动在可用节点间进行分片均衡,集群中的节点之间互相拷贝分片数据。原节点把迁移到其他节点分片的数据进行删除。

节点故障(主节点),状态为red
集群选举出新的主节点
将对应丢失的主分片的副本分片提升为主分片(yellow)
等待delayed_timeout (默认1min),如果故障节点还没回复,则在当前健康节点重建副本节点(green)

4. 主,副分片不同

每个分片都能独立执行数据搜索。ES集群中,每个节点都能处理任意请求。每个节点都知道任意文档的位置。
分片分为主分片与副本分片。主分片数目在索引创建的时候就确定好了,这个数目定义了这个索引能够 存储 的最大数据量。

读操作——搜索和返回数据——可以同时被主分片 或 副本分片所处理,所以当你拥有越多的副本分片时,也将拥有越高的吞吐量。副本分片数目可以动态调节

5. 数据插入的过程

  • shard_num = hash(\routing) % num_primary_shards,计算出文档要分配到的分片,在从集群元数据中找出对应主分片的位置

  • 请求接着会发送给Primary Shard,在Primary Shard上执行成功后

  • 从Primary Shard上将请求同时发送给多个Replica Shard,请求在多个Replica Shard上执行成功并返回给Primary Shard后,写入请求执行成功

  • 返回结果给客户端。

Elasticsearch为了减少磁盘IO保证读写性能,一般是每隔一段时间(比如5分钟)才会把Lucene的Segment写入磁盘持久化。为了保证写入Lucene内存的数据不丢失,引入Translog

在每一个Shard中,写入流程分为两部分,先写入Lucene,再写入TransLog。写入请求到达Shard后,先写Lucene文件,创建好索引,此时索引还在内存里面,接着去写TransLog,写完TransLog后,刷新TransLog数据到磁盘上,写磁盘成功后,请求返回给用户。

关于TranseLog两个点:
  • 先写内存,最后才写TransLog,

  • 每隔一段比较长的时间,比如30分钟后,Lucene会把内存中生成的新Segment刷新到磁盘上,刷新后索引文件已经持久化了,历史的TransLog就没用了,会清空掉旧的TransLog。

Elasticsearch内核解析 - 写入篇

6. 数据查询流程

  • 协调节点将检索请求广播到每个分片上

  • 每个分片本地执行检索请求,构建检索匹配的优先队列(返回数据ID)

  • 协调节点整合全局搜索结果集数据ID

  • 协调节点通过数据ID,提交多个获取数据的请求

  • 每个节点将数据返回给协调节点,协调节点返回给客户端

相关 [es 数据 怎么样] 推荐:

ES数据插入和查询流程是怎么样的?

- -
ES集群的状态有哪些,为什么主分片数目是固定的,副本分片却能动态调节,快看看这些关于ES的问题你都知道吗?. green 最健康的状态,说明所有的分片包括备份都可用. yellow 基本的分片可用,但是备份不可用(或者是没有备份). red 部分的分片可用,表明分片有一部分损坏. 此时执行查询部分数据仍然可以查到,遇到这种情况,还是赶快解决比较好.

es集群快速恢复(优化方案)_大数据_ClearloveXXX的博客-CSDN博客

- -
2、关闭allocate,禁止shard做allocate. 5、等级集群变成yellow后开启allocate,允许shard做allocate. 调整集群恢复时的带宽,-1是指无限制 . 调整集群恢复时的单机并发度,最好是和磁盘块数一致 . 调整集群恢复时单个shard中同时恢复的小文件的个数.

MySQL如何实时同步数据到ES?试试这款阿里开源的神器!

- - 掘金后端本月最热
SpringBoot实战电商项目mall(40k+star)地址:. mall项目中的商品搜索功能,一直都没有做实时数据同步. 最近发现阿里巴巴开源的 canal可以把MySQL中的数据实时同步到Elasticsearch中,能很好地解决数据同步问题. 今天我们来讲讲 canal的使用,希望对大家有所帮助.

ES优化总结

- - 非技术 - ITeye博客
最近一直在研究ES集群,也看了很多篇前辈们总结的博客,同事借鉴了官方给出的一些建议,做了一下几点总结,希望对后来者有用:. 为了防止ES进程的内存被置换到磁盘上(会导致在检索的时候发生内存交换导致检索速度迟缓)引起性能急速下降. 候可以把config/elasticsearch.yml中的bootstrap.mlockall设置为true就可以了.

MYSQL logstash 同步数据到es的几种方案对比以及每种方案数据丢失原因分析。

- -
MYSQL logstash 同步增量数据到ES. 最近一段时间,在使用mysql通过logstash-jdbc同步数据到es,但是总是会有一定程度数据丢失. logstash-jdbc无非是通过sql遍历数据表的所有数据,然后同步到es. 对于表里面的所有字段都需要查出来然后同步到es中去. 数据同步脚本分为全量同步与增量同步.

es的连接查询

- - 行业应用 - ITeye博客
在一般的关系型数据库中,都支持连接操作. 在ES这种分布式方案中进行连接操作,代价是十分昂贵的. 不过ES也提供了相类似的操作,支持水平任意扩展,实现连接的效果. 其他内容, 参考Elasticsearch官方指南整理. 在ES中支持两种连接方式:嵌套查询 和 has_child、has_parent父子查询.

ES性能优化总结

- - 互联网 - ITeye博客
    Elasticsearch是目前大数据领域最热门的技术栈之一,经过近8年的发展,已从0.0.X版升级至6.X版本,虽然增加了很多的特性和功能,但是在主体架构上,还是没有太多的变化. 下面就把我对于ES使用实践的一些经验总结一下,供大家参考;也请大家拍砖. 如果有条件,尽可能使用SSD硬盘, 不错的CPU.

豆瓣现在到底怎么样?让我们用数据来说话

- - 极客公园-GeekPark
作者: 黑板报值日生 编者注:本文转载于豆瓣日志,作者 维舟授权极客公园发布,原标题为《. 从 2005 年 3 月 6 日正式上线算起,豆瓣诞生已将十年,此时稍作回顾或许也正合宜. 在这十年间,对豆瓣自不免有许多批评和质疑(这些声音恐怕大多来自它的用户),但不可否认,它堪称创造了历史. 豆瓣的模式在中国迄今没有哪家能完全复制(在这一意义上,它是没有竞争对手的),它属于那种「只发生一次」的历史事件.

es近实时搜索原理

- - 企业架构 - ITeye博客
 随着按段(per-segment)搜索的发展, 一个新的文档从索引到可被搜索的延迟显著降低了. 新文档在几分钟之内即可被检索,但这样还是不够快.  提交(Commiting)一个新的段到磁盘需要一个 . fsync 来确保段被物理性地写入磁盘,这样在断电的时候就不会丢失数据. 但是  fsync 操作代价很大; 如果每次索引一个文档都去执行一次的话会造成很大的性能问题.

ES既是搜索引擎又是数据库?真的有那么全能吗? - 更多 - dbaplus社群:围绕Data、Blockchain、AiOps的企业级专业社群。技术大咖、原创干货,每天精品原创文章推送,每周线上技术分享,每月线下技术沙龙。

- -
经常遇到很多朋友询问,如何学好Elasticsearch. 这个问题本质上很不好回答,但我一直又很想好好回答,所以本文就以我个人的经验视角,跟大家探讨一下如何正确的拥抱Elasticsearch. Elasticsearch是什么,不同的人有不同的理解定位,之前写过Elasticsearch对比其它数据产品的文章.