Elasticsearch知识点
所属分类 elasticsearch
浏览量 1215
如何实现Master选举
ZenDiscovery
Ping
Unicast(单播 配置 主机列表)
master 候选节点(node.master: true)
根据nodeId字典排序 选出第一个节点
投票数过半 master节点数n/2 + 1
master节点的职责 集群、节点和索引的管理
Master 负责集群状态信息的改变,并同步给其他节点
只有建立索引和类型需要经过 Master,数据的读写使用 Routing 规则, Route 到集群中的节点,所以数据写入压力是分散到整个集群的。
当集群master候选数量不小于3个时,可以通过设置最少投票通过数量(discovery.zen.minimum_master_nodes)超过所有候选节点一半以上来解决脑裂问题;
当候选数量为两个时,只能修改为唯一的一个master候选,其他作为data节点,避免脑裂问题。
索引文档的过程
shard = hash(document_id) % (num_of_primary_shards)
可通过 routing 设置路由字段
先写入 Memory Buffer , 定时(默认1秒)写入到Filesystem Cache
从Momery Buffer到Filesystem Cache的过程 叫 refresh
防止数据丢失 translog
当Filesystem cache中的数据写入到磁盘中时,才会清除掉,这个过程叫 flush
flush 内存中的缓冲将被清除,内容被写入一个新段,段的fsync将创建一个新的提交点,并将内容刷新到磁盘,旧的translog将被删除并开始一个新的translog。
flush触发机制 定时触发(默认30分钟)或 translog 大小超过阈值(默认512M)
更新和删除文档的过程
文档不可变 每个段都有一个相应的.del文件
删除时 在.del文件中被标记为删除 , 文档依然能匹配查询,但是会在结果中被过滤掉
段合并时,.del文件中被标记为删除的文档将不会被写入新段。
更新时,旧版本的文档在.del文件中被标记为删除,新版本的文档被索引到一个新段。
旧版本的文档依然能匹配查询,但是会在结果中被过滤掉。
搜索的过程
两阶段 Query Then Fetch
查询阶段 查询会广播到索引中每一个分片
每个分片在本地执行搜索并构建一个匹配文档的大小为 from + size 的优先队列
每个分片返回各自优先队列中 所有文档的 ID 和排序值 给协调节点,它合并这些值到自己的优先队列中来产生一个全局排序后的结果列表。
Fetch阶段
协调节点 计算出哪些文档需要fetch并向相关的分片提交多个 GET 请求
一旦所有的文档都被取回了,协调节点返回结果给客户端
Query Then Fetch的搜索类型在文档相关性打分的时候参考的是本分片的数据,在文档数量较少的时候可能不准确,
DFS Query Then Fetch增加了一个预查询的处理,询问Term和Document frequency,这个评分更准确,但是性能会差一些
大数据量(上亿量级)的聚合如何实现
首个近似聚合是cardinality 度量
提供一个字段的基数,即该字段的distinct或者unique值的数目
基于HLL算法,HLL 对输入做哈希运算,然后根据哈希运算的结果中的 bits 做概率估算从而得到基数。
如何保证读写一致
版本号 乐观并发控制 ,确保新版本不会被旧版本覆盖
写操作,一致性级别支持quorum/one/all,默认 quorum,只有大多数分片写成功才成功
读操作,可以设置replication为sync(默认),操作在主分片和副本分片都完成后才会返回;
如果设置replication为async时
设置搜索请求参数 _preference=primary 查询主分片
集群 节点 索引 文档 类型
集群 名称 ,节点按名称加入集群
一个集群由一个或多个共享相同集群名称的节点组成
索引就像关系数据库中的“数据库”
索引是逻辑名称空间,映射到一个或多个主分片,并且可以有零个或多个副本分片
索引是文档的集合
文档类似于关系数据库中的一行,索引中的每个文档可以具有不同的结构(字段)
类型是索引的逻辑类别/分区,其语义完全取决于用户。
6.0 版本为保持兼容,仍然会支持单index,多type结构,但是不推荐这么设置。
7.0 版本必须使用单index 单type,不支持 多type
分片
索引分割成分布在多个节点上的分片
分析器
分析器由一个Tokenizer和零个或多个TokenFilter组成
Keyword 和 Text 的区别
Keyword 不分词
text 会分词
反向索引 倒排索引
elasticsearch7安装配置使用
上一篇
下一篇
mysql面试题
redis面试题
cassandra架构要点
kafka面试题
tcpdump使用简介
kafka各版本特性