ElasticSearch-工作流程

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ElasticSearch-工作流程相关的知识,希望对你有一定的参考价值。

参考技术A

启动过程
当ElasticSearch节点启动时,使用广播技术来发现同一集群中的其他节点(配置文件中的集群名称)并于它们连接。集群中会有一个节点被选为管理节点(master node),负责集群的状态管理以及在集群拓扑变化时做出反应,分发索引分片至集群的相应节点。

es写数据
1)客户端选择一个node发送请求,这个node就是coordinating node(协调节点)
2)协调节点对document进行路由,将请求转发给对应的node
3)node上的primary shard处理请求,然后将数据同步到replica shard
①先写入内存,并将操作写入translog(数据不能被搜索,translog会在每隔5秒或者每次写入完成后写入磁盘)
②es每隔1秒(配置)进行一个刷新(refresh),写入内存到新数据被写入文件缓存中,并构成一个segement(数据能被搜索,未写入磁盘,可能丢失)
③每隔30分钟或者translog大小达到阈值,触发commit,执行fsync操作,当前translog被删除
(merge:每次refresh都会生成一个segment,segment过多会消耗资源,搜索变慢。A和B两个segment,小segmentC,A,B被读到内存中和Cmerge,生产大segement D,触发commit)
4)返回响应结果给客户端
es删除数据
磁盘上每个segment都有一个.del文件关联,当发送删除请求时,在.del中标记为删除,文档仍能够被搜索到,但会从结果中过滤掉。merge时.del文件中标记但数据不会被包括在新的segment中
es读数据
1)客户端发送请求到协调节点
2)协调节点将请求转发到对应的shard(通过对doc key进行哈希( Murmur哈希算法 ),判断出doc在哪个shard上,然后对该shard查询)
3)每个shard将搜索结果(doc id)返回给协调节点,由协调节点进行数据的合并、排序、分页等操作
4)协调节点根据doc id去各节点拉取document,返回给客户端
es更新数据
创建新文档时,es会为该文档分配一个版本号。对文档但每次更新都会产生一个新的版本号。当执行更新时,旧版本在.del文件中标记删除,并且新版本在新segment中写入索引
并发控制
基于乐观锁和版本号
master选举
①如果集群中存在master,认可该master,加入集群
②如果集群中不存在master,从具有master资格的节点中选id最小的节点作为master
实时性(FileSystem Cache)
一个Index由若干segment组成,搜索时按segment搜索,索引一条segment后,每个段会通过fsync操作持久化到磁盘,而fsync 操作比较耗时。
es中新增的document会被收集到indexing buffer区后被重写成一个segment,然后直接写入FileSystem Cache中,只要sengment文件被写入cache后,这个sengment就可以打开和查询,从而确保在短时间内就可以搜到。

ElasticSearch ElasticSearch 读取 流程

以上是关于ElasticSearch-工作流程的主要内容,如果未能解决你的问题,请参考以下文章

CouchDB、Elastic Search 和 River 插件无法正常运行

Elasticsearch:Supervised Machine Learning - 有监督的机器学习

Logstash+elasticsearch+elastic+nignx

Elastic Search - 它是否适合分析团队的DB?

错误 [内部] 为 docker.elastic.co/elasticsearch/elasticsearch:7.12.0 加载元数据

Elasticsearch 和 Hive 协同工作