2019年常见ElasticSearch面试题解析(上)

  • 时间:
  • 浏览:1
  • 来源:uu快3输钱_uu快3赢钱诀窍_豹子

学术的解答妙招:

倒排索引,相反于一篇文章富含 了什么词,它从词出发,记载了你什儿 词在什么文档中再次跳出过,由两要素组成——词典和倒排表。

加分项:倒排索引的底层实现是基于:FST(Finite State Transducer)数据形状。

lucene 从 4+版本后开始小量使用的数据形状是 FST。FST 一三个小优点:

(1)空间占用小。通过对词典中单词前缀和后缀的重复利用,压缩了存储空间;

(2)查询带宽快。O(len(str))的查询时间简化度。

Lucene 是有索引和搜索的一三个小过程,富含 索引创建,索引,搜索一三个小要点。里能基于你什儿 脉络展开有些。

面试官:想了解 ES 搜索的底层原理,不再只关注业务层面了。

解答:

搜索拆解为“query then fetch” 一三个小阶段。

query 阶段的目的:定位到位置,但不取。

步骤拆解如下:

(1)假设一三个小索引数据有 5 主+1 副本 共 10 分片,一次请求会命中(主肯能副本分片中)的一三个小。

(2)每个分片在本地进行查询,结果返回到本地有序的优先队列中。

(3)第 2)步骤的结果发送到协调节点,协调节点产生一三个小全局的排序列表。

fetch 阶段的目的:取数据。

路由节点获取所有文档,返回给客户端。欢迎大伙儿关注我的公种浩【线程池员追风】,2019年多家公司java面试题分类整理了10000多道1000多页pdf文档,文章都在在上边更新,分类整理的资料也会放上去上边。

ElasticSearch是一三个小基于Lucene的搜索服务器。它提供了一三个小分布式多用户能力的全文搜索引擎,基于RESTful web接口。Elasticsearch是用Java语言开发的,并作为Apache许可条款下的开放源码发布,是什儿 流行的企业级搜索引擎。ElasticSearch用于云计算中,才能达到实时搜索,稳定,可靠,快速,安装使用方便。官方客户端在Java、.NET(C#)、PHP、Python、Apache Groovy、Ruby和有些有些语言中都在 可用的。根据DB-Engines的排名显示,Elasticsearch是最受欢迎的企业搜索引擎,其次是Apache Solr,也是基于Lucene。

面试官:想了解对 ES 集群的运维能力。

解答:

(1)关闭缓存 swap;

(2)堆内存设置为:Min(节点内存/2, 32GB);

(3)设置最大文件句柄数;

(4)线程池+队列大小根据业务前要做调整;

(5)磁盘存储 raid 妙招——存储有条件使用 RAID10,增加单节点性能以及防止单节点存储故障。

1、elasticsearch 了解几个,一句话大伙儿公司 es 的集群架构,索引数据大小,分片有几个,以及有些调优手段 。

2、elasticsearch 的倒排索引是什么

3、elasticsearch 索引数据多了为社 会么会办,如何调优,部署

4、elasticsearch 是如何实现 master 选举的

5、全部描述一下 Elasticsearch 索引文档的过程

6、全部描述一下 Elasticsearch 搜索的过程?

7、Elasticsearch 在部署时,对 Linux 的设置有什么优化妙招

8、lucence 结构形状是什么?

9、Elasticsearch 是如何实现 Master 选举的?

10、Elasticsearch 中的节点(比如共 20 个),其中的 10 个选了一三个小master,另外 10 个选了一三个小 master,为社 会么会办?

11、客户端在和集群连接时,如何挑选特定的节点执行请求的?

12、全部描述一下 Elasticsearch 索引文档的过程。

第一步:客户写集群某节点写入数据,发送请求。(肯能没法指定路由/协调节点,请求的节点扮演路由节点的角色。)

第二步:节点 1 接受到请求后,使用文档_id 来挑选文档属于分片 0。请求会被转到另外的节点,假定节点 3。假使 分片 0 的主分片分配到节点 3 上。

第三步:节点 3 在主分片上执行写操作,肯能成功,则将请求并行转发到节点 1和节点 2 的副本分片上,等待歌曲结果返回。所有的副本分片都报告成功,节点 3 将向协调节点(节点 1)报告成功,节点 1 向请求客户端报告写入成功。

肯能面试官再问:第二步中的文档获取分片的过程?

回答:借助路由算法获取,路由算法要是根据路由和文档 id 计算目标的分片 id 的过程。

1shard = hash(_routing) % (num_of_primary_shards)

面试官:想了解你的知识面的广度和高度。

解答:

补充:关于 Lucene 的 Segement:

(1)Lucene 索引是由多个段组成,段什儿 是一三个小功能齐全的倒排索引。

(2)段是不可变的,允许 Lucene 将新的文档增量地换成到索引中,而没法多从头重建索引。

(3)对于每一三个小搜索请求而言,索引中的所有段都在被搜索,假使 每个段会消耗CPU 的时钟周、文件句柄和内存。这由于段的数量没法来越多,搜索性能会越低。

(4)为了防止你什儿 问题,Elasticsearch 会合并小段到一三个小较大的段,提交新的合并段到磁盘,并删除什么旧的小段。

3.3 部署层面一旦后后没法规划,这里就属于应急策略。

协调节点默认使用文档 ID 参与计算(也支持通过 routing),以便为路由提供大概的分片。

shard = hash(document_id) % (num_of_primary_shards)

(1)当分片所在的节点接收到来自协调节点的请求后,会将请求写入到 MemoryBuffer,假使 定时(默认是每隔 1 秒)写入到 Filesystem Cache,你什儿 从 MomeryBuffer 到 Filesystem Cache 的过程就叫做 refresh;

(2)当然在有些情况下,发生 Momery Buffer 和 Filesystem Cache 的数据肯能会丢失,ES 是通过 translog 的机制来保证数据的可靠性的。确实现机制是接收到请求后,一并也会写入到 translog 中 ,当 Filesystem cache 中的数据写入到磁盘中时,才会清除掉,你什儿 过程叫做 flush;

(3)在 flush 过程中,内存中的缓冲将被清除,内容被写入一三个小新段,段的 fsync将创建一三个小新的提交点,并将内容刷新到磁盘,旧的 translog 将被删除并开始一三个小新的 translog。

(4)flush 触发的时机是定时触发(默认 1000 分钟)肯能 translog 变得没法来越多(默认为 512M)时;

欢迎大伙儿一并交流,喜欢文章记得关注我点个赞哟,感谢支持!

面试官:想了解 ES 集群的底层原理,不再只关注业务层面了。

解答:

前置前提:

(1)不里能候选主节点(master:true)的节点才能成为主节点。

(2)最小主节点数(min_master_nodes)的目的是防止脑裂。

核对了一下代码,核心入口为 findMaster,挑选主节点成功返回对应 Master,假使 返回 null。选举流程大致描述如下:

第一步:确认候选主节点数达标,elasticsearch.yml 设置的值

discovery.zen.minimum_master_nodes;

第二步:比较:先判定是与否具备 master 资格,具备候选主节点资格的优先返回;

若两节点都为候选主节点,则 id 小的值会主节点。注意这里的 id 为 string 类型。

题外话:获取节点 id 的妙招。

1.2、写入调优(1)写入前副本数设置为 0;

面试官:想了解大数据量的运维能力。

解答:索引数据的规划,应在前期做好规划,正所谓“设计先行,编码在后”,一三个小才能有效的防止突如其来的数据激增由于集群防止能力缺乏引发的线上客户检索肯能有些业务受到影响。

如何调优,正如问题 1 所说,这里细化一下:

3.1 动态索引层面基于模板+时间+rollover api 滚动创建索引,举例:设计阶段定义:blog 索引的模板格式为:blog_index_时间戳的形式,每天递增数据。一三个小做的好处:不至于数据量激增由于单个索引数据量非常大,接近于上线 2 的32 次幂-1,索引存储达到了 TB+甚至更大。

1.4、有些调优部署调优,业务调优等。

面试官:想了解你对基础概念的认知。

解答:通俗解释一下就里能。

传统的大伙儿的检索是通过文章,逐个遍历找到对应关键词的位置。

而倒排索引,是通过分词策略,形成了词和文章的映射关系表,你什儿 词典+映射表即为倒排索引。有了倒排索引,就能实现 o(1)时间简化度的带宽检索文章了,极大的提高了检索带宽。

面试官:想了解应聘者后后公司接触的 ES 使用场景、规模,有没法做过比较大规模的索引设计、规划、调优。

解答:如实结合当时人的实践场景回答即可。

比如:ES 集群架构 13 个节点,索引根据通道不同共 20+索引,根据日期,每日递增 20+,索引:10 分片,每日递增 1 亿+数据,每个通道每天索引大小控制:1000GB 之内。

仅索引层面调优手段:

1.1、设计阶段调优(1)根据业务增量需求,采取基于日期模板创建索引,通过 roll over API 滚动索引;

3.2 存储层面冷热数据分离存储,热数据(比如最近 3 天肯能一周的数据),其余为冷数据。

面试官:想了解 ES 的底层原理,不再只关注业务层面了。

解答:

这里的索引文档应该理解为文档写入 ES,创建索引的过程。

文档写入富含 :单文档写入和批量 bulk 写入,这里只解释一下:单文档写入流程。

记住官方文档中的你什儿 图。

TransportClient 利用 transport 模块远程连接一三个小 elasticsearch 集群。它何必 加入到集群中,要是简单的获得一三个小肯能多个初始化的 transport 地址,并以 轮询 的妙招与什么地址进行通信。

选了一三个小 master,另外 10 个选了一三个小 master,为社 会么会办?

(1)当集群 master 候选数量不小于 3 个时,里能通过设置大概投票通过数量(discovery.zen.minimum_master_nodes)超过所有候选节点一半以上来防止脑裂问题;

(3)当候选数量为一三个小时,不里能修改为唯一的一三个小 master 候选,有些作为 data节点,防止脑裂问题。

(1)Elasticsearch 的选主是 ZenDiscovery 模块负责的,主要富含 Ping(节点之间通过你什儿 RPC 来发现彼此)和 Unicast(单播模块富含 一三个小主机列表以控制什么节点前要 ping 通)这两要素;

(2)对所有里能成为 master 的节点(node.master: true)根据 nodeId 字典排序,每次选举每个节点都把当时人所知道节点排一次序,假使 选出第一三个小(第 0 位)节点,何必 认为它是 master 节点。

(3)肯能对某个节点的投票数达到一定的值(里能成为 master 节点数 n/2+1)假使 该节点当时人也选举当时人,那你什儿 节点要是 master。假使 重新选举经常到满足上述条件。

(4)补充:master 节点的职责主要包括集群、节点和索引的管理,不负责文档级别的管理;data 节点里能关闭 http 功能*。

1.3、查询调优(1)禁用 wildcard;