M & S
full restart
Shards Allocation Failure
Cluster Allocation Explain<br>
常见分片分配失败原因
磁盘空间不足,超过watermark
Max Retry Limitation
可能的原因
JVM GC Concurrent Mode Failure
如何阅读GC Log<br>
ES进程自动死亡-Kernal OOM
避免集群在重启过程中,发生过多分片转移
Monitoring 功能突然失效
HA&DR
Snapshot
Cross-Cluster-Replication
ILM:Index-lifecycle-management
Hot-Warm-Cold Architecture
Ingest Pipeline <br>
Processors
Condition
满足Script中定义的条件,才执行指定Processor
Mapping
Field datatypes
Nested Type: 用于存储JsonArr
Joined
Dynamic Mapping
dynamic: true|false|strict 是否开启动态映射,根据预定义规则为未定义字段绑定字段<br>
Aggreagations
聚合种类
Bucket: 桶聚合,将满足相同条件的文档聚合到一个桶中
Metric: 统计聚合,对一系列文档计算相同指标
Pipeline: 聚合其他聚合函数的结果
Matrix: 创造矩阵结果集
Search
原理介绍
查询过程
默认,适用于数据量大时:Query then Fetch
可选,适用于数据量小时:dfs_query_then_fetch
数据存储过程
text类型:_source 反向索引
其他类型:doc_values 聚合排序访问字段
NRT:Near Real Time
Query and Filter context
Query DSL
Term-Level Queries
不会对输入的内容进行分析,而是与其将 tokens(Keyword 类型整个为 token) 进行<b>精确的匹配查询。</b>
参数
operator: or/and, 用于表示多个token匹配之间的关系
minimum_should_match: 当operator为or时,可以用于指定最少需要匹配的token数量
Full text queries
输入内容将被分词为 tokens,然后与 tokens(Keyword 类型整个为 token)进行精确的匹配查询,匹配任意一个token 就算匹配<br>Analyzer则与被查询字段一致
Compound queries
提供了<b>bool</b>查询和能够<b>调整相关性评分</b>的查询
Joining queries
分页
<b>最简单:</b> from+size
折中选项: Search After
<b>大数据: </b>scroll
Sort
建议在多值排序中,添加上<b>_id(UUID)</b>排序,这样所生成的sort value都将不同,有利于分页
对于数组对象,可以使用min/max/sum等函数,对其选择性排序
Highlight
其他特性
Cross Cluster Search: 跨集群查询
Search Template
基础知识
节点角色
master/data/coordinator/ingest/ml
索引及分片
primary shard & replication shard
索引的最佳分片设置
什么是分片
基于时序划分索引
维护索引和分片的开销
每GB堆内存,不要存储超过20个Shards
保持单个shard大小在几GB到几十GB之间
Installation & Configuration
JVM
Heap Size
堆内存大小设置
堆内存使用优化
GC
激活XPack功能
设置HTTP/TCP证书
证书相关配置
将证书密码存入keystore
ECE考试提醒:
密码设置
安装插件
常见问题
Linux 系统优化
1. 关闭 JVM Swap <br>2. 堆内存设置为 节点内存一半,且不要超过32GB<br>3. 设置最大文件句柄数
Indexing Data
创建 Index
配置节点属性: Configure node attributions
分片分配感知:Shard Allocation Awareness
当组成ES的节点来自多个机房,机架或物理机时,就可以启动该功能,<br>ES将分片智能的分配到不同物理空间中,来避免单点故障
分片过滤: Shards Filtering
集群层面分片分配过滤: Cluster-Level Shard Allocation Filtering
索引层面分片分配过滤: Index-Level Shard Allocation Filtering
分片分配的常识
ES会尽可能将一个Shard的主从分片,放置在不同节点上,如果不行,则不分配副本分片
数据索引总体流程<br>
Coordiantor -> Primary Shard ->Replication Shard -> Primary Shard ->Coordiantor
Data 节点如何索引数据
TransLog机制:每次写请求都会放到 TransLog 中,默认每5S 执行一次 fsync,将 TransLog 刷入磁盘<br>Flush 操作同时会清空 TransLog
Memory Buffer ---Refresh--> Filesystem Cache
默认每秒执行一次 Refresh 操作,将数据刷入 Filesystem Cache,此时数据可被查找
Flush
当被缓存数据大于500MB 或者 每30分钟执行一次 Flush 操作,将数据刷入一个 <b>Segment,</b> 同时清空 TransLog
Segment 组成 Lucne 的 Index, 每一个 Segment 都是一个功能齐全的倒排索引。
对于每一个搜索,都会查询索引中的段,每个段都会消耗资源,段越多,搜索性能越低
通过定期 force_merge 合并段
Reindex<br>
当我们改变了ES的 Mapping等设置时,已存档的数据不会更改,Reindex可以帮我们解决这个问题
aliases
一个别名可以指向一个或多个索引,当指向多个索引时,需要指定某一个索引为写入索引
可以为别名设置 filter query,用于过滤结果集
Update/Delete Data
ES 段中的数据不可变,因此删除和更新操作也是写操作
每个Segment 都有一个 相应的<b>.del 文件</b>
<b>删除请求:</b> 在.del 文件将对应文档标记为删除,文档依旧会匹配查询,但是在结果集中被过滤。<br>
<b>更新请求:</b>ES会为该文档指定一个新的版本号并写入,将旧的文档在.del 里面标记删除。
<b>段合并:</b>在段合并中,旧的数据和被删除的数据,不会被写入新段中
update_by_query: 指定查询语句和更新语句,更新所有查询语句所匹配的文档
ES 认证工程师要求
安装和配置
部署并启动ES集群<br>
配置集群节点
使用ES Security 保护集群安全
使用ES Security 做角色权限管理
Indexing Data
客制化创建Index
对Index的文档进行增删改查
Index
Automatic Index Create: <br>
Opeartion Type
ID自增
Routing
Delete
Delete By Query
https://www.elastic.co/guide/en/elasticsearch/reference/7.2/docs-delete-by-query.html
Update
Update
Update By Query
https://www.elastic.co/guide/en/elasticsearch/reference/7.2/docs-update-by-query.html
定义和使用索引别名
定义并使用Index Template
定义并使用dynamic template
使用Reindex API and Update By Query API to reindex and/or update documents
定义和使用Ingest Pipeline,包括使用painless来修改文档
Queries<br>
针对一个index的多个fields,对于term和phrase 编写和执行Search query
Search
Search API 特点
Multi-Index
Partial responses
查询方式
URL Search
Request Body Search
Doc value fields
query
Query DSL
Query and filter context
Compound queries
Boolean
Boosting
Constant Score
Disjunction Max
Function Score
Full text queries
intervals
Match
Match boolean prefix
Match phrase
Match phrase prefix
Multi-match
Common Terms Query
Query string
Simple query string
Joining queries
Netsted
Has Child
Has Parent
Parent ID
Match All
Span Queries
Specialized queries
distance_feature
more_like_this
percolate
rank_feature
script
script_score
wrapper
Term-level queries
sort
Highlighting
Scroll
编写和执行一个由多个queries和filters以boolean 连接的search query
compound Search
在query的返回中,高亮Search Item
Highlight
实现搜索查询结果的分页
使用Scroll API来获取大数量的结果集
将模糊匹配应用于查询
定义和使用search template
对跨集群场景编写并执行querys
Aggregations<br>
编写并执行metric 和 bucket 聚合<br>
编写并执行包含子聚合的聚合
编写并执行 pipeline aggregations
Mappings and Text Analysis
按需定义Mapping
按需创建一个客制化 analyzer
Define and use multi-fields with different data types and/or analyzers <br>
Configure an index so that it properly maintains the relationships of nested arrays of objects
Configure an index that implements a parent/child relationship
z暂时跳过了,如果后面有遇到类似真题再学习吧
Cluster Administration
将Index的shards分配到指定的节点上
对一个index 配置 shards allocation awareness和 forced awareness
分析诊断shard issue 并 恢复集群健康
备份和恢复Cluster或Indices数据
Snapshot
配置Cluster使用 冷热温架构
配置集群使用CCR
其他要求
在学习的,额外的一点是要能找到知识点对应的文档位置
分布式选举
节点数量为奇数,防止脑裂
如何实现 Master 选举
ZenDiscovery: 每个节点将 Master Candidate 节点名字根据字典排序,并投票给排序第一的节点。<br>如果某一节点获得集群过半票数,则成为 Master 节点,否则开始下一轮选举
优化
优化数据Indexing 速度
使用 BulkRequest: 性能优于单个文档的请求
使用 BenchMark测试 BulkRequest 的最佳文档数量
使用多个 Worker或者线程来发送数据到 ES
关闭或提高 Refresh Interval
关闭数据复制,在数据初始化阶段
index.number_of_replicas: 0
硬件方面
给予文件系统 cache 更多内存
使用更快的硬件
RAID 阵列来讲数据索引到多个 SSD 上
使用 自动生成的 ID
使用CCR,让查询操作分流到 Follower Index 上
查询调优