2021Java面试题合集-ElasticSearch面试题30道.pdf
《2021Java面试题合集-ElasticSearch面试题30道.pdf》由会员分享,可在线阅读,更多相关《2021Java面试题合集-ElasticSearch面试题30道.pdf(13页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、上篇1、elasticsearch 了解多少,说说你们公司es的集群架构,索引数据大小,分片有多少,以及一些调优手段。面试官:想了解应聘者之前公司接触的ES使用场景、规模,有没有做过比较大规模的索引设计、规划、调优。解答:如实结合自己的实践场景回答即可.比如:ES集群架构13个节点,索引根据通道不同共20+索引,根据日期,每日递增20+,索引:10分片,每日递增1亿+数据,每个通道每天索引大小控制:150GB之内。仅索引层面调优手段:1、设计阶段调优(1)根据业务增量需求,采取基于日期模板创建索引,通过roll over API滚动索引;(2)使用别名进行索引管理;(3)每天凌晨定时对索引做f
2、orce_merge操作,以释放空间;(4)采取冷热分离机制,热数据存储到SSD,提高检索效率;冷数据定期进行shrink操作,以缩减存储;(5)采取curator进行索引的生命周期管理;(6)仅针对需要分词的字段,合理的设置分词器;(7)Mapping阶段充分结合各个字段的属性,是否需要检索、是否需要存储等。.1.2、写入调优(1)写入前副本数设置为0;(2)写入前关闭refresh_interval设置为-1,禁用刷新机制;(3)写入过程中:采取bulk批量写入;(4)写入后恢复副本数和刷新间隔;(5)尽量使用自动生成的id。1.3、查询调优(1)禁用 wildcard;(2)禁用批量te
3、rms(成百上千的场景);(3)充分利用倒排索引机制,能keyword类型尽量keyword;(4)数据量大时候,可以先基于时间敲定索引再检索;(5)设置合理的路由机制。1.4、其他调优部署调优,业务调优等。上面的提及一部分,面试者就基本对你之前的实践或者运维经验有所评估了。2、elasticsearch的倒排索引是什么面试官:想了解你对基础概念的认知。解答:通俗解释一下就可以。传统的我们的检索是通过文章,逐个遍历找到对应关键词的位置。而倒排索引,是通过分词策略,形成了词和文章的映射关系表,这种词典+映射表即为倒排索引。有了倒排索引,就能实现。(1)时间复杂度的效率检索文章了,极大的提高了检索
4、效率。term字典 倒排docld友学术的解答方式:倒排索引,相反一篇文章包含了哪些词,它从词出发,记载了这个词在哪些文档中出现过,由两部分组成一一词典和倒排表。加分项:倒排索引的底层实现是基于:FST(Finite State Transducer)数据结构,lucene从4+版本后开始大量使用的数据结构是FST。FST有两个优点:(1)空间占用小。通过对词典中单词前缀和后缀的重复利用,压缩了存储空间;(2)查询速度快。O(len(str)的查询时间复杂度.3、elasticsearch索引数据多了怎么办,如何调优,部署面试官:想了解大数据量的运维能力。解答:索引数据的规划,应在前期做好规划
5、,正所谓“设计先行,编码在后,这样才能有效的避免突如其来的数据激增导致集群处理能力不足引发的线上客户检索或者其他业务受到影响。如何调优,正如问题1所说,这里细化一下:3.1 动态索引层面基于模板+时间+rollover api滚动创建索引,举例:设计阶段定义:blog索引的模板格式为:blogjndex一时间戳的形式,每天递增数据。这样做的好处:不至于数据量激增导致单个索引数据量非常大,接近于上线2的32次鬲-1,索引存储达到了 TB+甚至更大。一旦单个索引很大,存储等各种风险也随之而来,所以要提前考虑+及早避免。3.2 存储层面冷热数据分离存储,热数据(比如最近3天或者一周的数据),其余为冷
6、数据。对于冷数据不会再写入新数据,可以考虑定期force_merge加shrink压缩操作,节省存储空间和检索效率。3.3 部署层面一旦之前没有规划,这里就属于应急策略。结合ES自身的支持动态扩展的特点,动态新增机器的方式可以缓解集群压力,注意:如果之前主节点等规划合理,不需要重启集群也能完成动态新增的。4、elasticsearch是如何实现master选举的面试官:想了解ES集群的底层原理,不再只关注业务层面了。解答:刖置刖提:(1)只有候选主节点(master:tru e)的节点才能成为主节点。(2)最小主节点数(min_master_nodes)的目的是防止脑裂。核对了一下代码,核心入
7、口为findMaster,选择主节点成功返回对应Master,否则返回null。选举流程大致描述如下:第一步:确认候选主节点数达标,elasticsearch.yml设置的值discovery.zen.minimum_master_nodes;第二步:匕戚:先判定是否具备master资格,具备候选主节点资格的优先返回;若两节点都为候选主节点,则id小的值会主节点。注意这里的id为string类型。题外话:获取节点id的方法。1GET/_cat/nodes?v&h=ip,port,heappercent,heapMax,id,name21 p port heappercent heapMax i
8、d name复制代码5、详细描述一下Elasticsearch索引文档的过程面试官:想了解ES的底层原理,不再只关注业务层面了。解答:这里的索引文档应该理解为文档写入ES,创建索引的过程。文档写入包含:单文档写入和批量bulk写入,这里只解释一下:单文档写入流程。记住官方文档中的这个图。第一步:客户写集群某节点写入数据,发送请求。(如果没有指定路由/协调节点,请求的节点扮演路由节点的角色.)第二步:节点1接受到请求后,使用文档d来确定文档属于分片0。请求会被转到另外的节点,假定节点3。因此分片0的主分片分配到节点3上。第三步:节点3在主分片上执行写操作,如果成功,则将请求并行转发到节点1和节点
9、2的副本分片上,等待结果返回。所有的副本分片都报告成功,节点3将向协调节点(节点1)报告成功,节 点1向请求客户端报告写入成功。如果面试官再问:第二步中的文档获取分片的过程?回答:借助路由算法获取,路由算法就是根据路由和文档id计算目标的分片id的过程。Ishard=hash(.routing)%(num_of_primary_shards)复制代码6、详细描述一下Elasticsearch搜索的过程?面试官:想了解ES搜索的底层原理,不再只关注业务层面了。解答:搜索拆解为query then fetch两个阶段。query阶段的目的:定位到位置,但不取。步骤拆解如下:(1)假设一个索引数据有
10、5主+1副 本 共10分片,一次请求会命中(主或者副本分片中)的一个。(2)每个分片在本地进行杳询,结果返回到本地有序的优先队列中。(3)第2)步骤的结果发送到协调节点,协调节点产生一个全局的排序列表。fetch阶段的目的:取数据。路由节点获取所有文档,返回给客户端。7、Elasticsearch在部署时,对Linux的设置有哪些优化方法面试官:想了解对ES集群的运维能力.解答:(1)关闭缓存swap;(2)堆内存设置为:Min(节点内存/2,32GB);(3)设置最大文件句柄数;(4)线程池+队列大小根据业务需要做调整;(5)磁盘存储raid方式一一存储有条件使用RAID10,增加单节点性能
11、以及避免单节点存储故障。8、lucence内部结构是什么?面试官:想了解你的知识面的广度和深度。解答:Lucene是有索引和搜索的两个过程,包含索引创建,索引,搜索三个要点。可以基于这个脉络展开一些。9、Elasticsearch是如何实现Master选举的?(1)日asticsearch的选主是ZenDiscovery模块负责的,主要包含Ping(节点之间通过这个RPC来发现 彼 此)和Unicast(单播模块包含一个主机列表以控制哪些节点需要ping通)这两部分;(2)对所有可以成为master的 节 点(node.master:tru e)根据nodeld字典排序,每次选举每个节点都把自
12、己所知道节点排一次序,然后选出第一个(第0位)节 点,暂且认为它是master节点。(3)如果对某个节点的投票数达到一定的值(可以成为master节点数n/2+1)并且该节点自己也选举自己,那这个节点就是master。否则重新选举一直到满足上述条件。(4)补充:master节点的职责主要包括集群、节点和索引的管理,不负责文档级别的管理;data节点可以关闭http功能*。10、Elasticsearch中的节点(比如共20个),其中的10个选了一个m aster,另外10个选了另一个master,怎么办?(1)当集群master候选数量不小于3个时,可以通过设置最少投票通过数量(discove
13、ry.zen.minimum_master_nodes)超过所有候选节点一半以上来解决脑裂问题;(3)当候选数量为两个时,只能修改为唯一的一个master候选,其他作为data节点,避免脑裂问题。11、客户端在和集群连接时,如何选择特定的节点执行请求的?Transportclient利用transport模块远程连接一个elasticsearch集群。它并不加入到集群中,只是简单的获得一个或者多个初始化的transport地址,并以轮询的方式与这些地址进行通信。12、详细描述一下Elasticsearch索引文档的过程。协调节点默认使用文档ID参与计算(也支持通过routing),以便为路由提
14、供合适的分片。shard=hash(document_id)%(num_of_primary_shards)复制代码(1)当分片所在的节点接收到来自协调节点的请求后,会将请求写入到MemoryBuffer,然后定时(默认是每隔1秒)写 入 到Filesystem Cache,这个从MomeryBuffer至(I Filesystem Cache的过程就叫做 refresh;(2)当然在某些情况下,存在Momery Buffer和Filesystem Cache的数据可能会丢失,ES是通过translog的机制来保证数据的可靠性的。其实现机制是接收到请求后,同时也会写入到translog中,当R
15、lesystem cache中的数据写入到磁盘中时,才会清除掉,这个过程叫做flush;(3)在flush过程中,内存中的缓冲将被清除,内容被写入一个新段,段的fsync将创建一个新的提交点,并将内容刷新到磁盘,旧的translog将被删除并开始f 新的translog。(4)flush触发的时机是定时触发(默认30分 钟)或 者translog变得太大(默认为512M)时;补充:关于 Lucene 的 Segement:(1)Lucene索引是由多个段组成,段本身是一个功能齐全的倒排索引。(2)段是不可变的,允许Lucene将新的文档增量地添加到索引中,而不用从头重建索引。(3)对于每一个搜
16、索请求而言,索引中的所有段都会被搜索,并且每个段会消耗CPU的时钟周、文件句柄和内存。这意味着段的数量越多,搜索性能会越低。(4)为了解决这个问题,日asticsearch会合并小段到一个较大的段,提交新的合并段到磁盘,并删除那些旧的小段。下篇1.Elasticsearch是一个分布式的RESTful风格的搜索和数据分析引擎。(1)直 询:日asticsearch允许执行和合并多种类型的搜索一结构化、非结构化、地理位置、度量指标一搜索方式随心而变。(2)分 析:找到与查询最匹配的十个文档是一回事。但是如果面对的是十亿行日志,又该如何解读呢?日asticsearch聚合让您能够从大处着眼,探索数
17、据的趋势和模式。(3)速 度:Egsticsearch很快。真的,真的很快。(4)可扩展性:可以在笔记本电脑上运行。也可以在承载了 PB级数据的成百上千台服务器上运行。(5)弹 性:日asticsearch运行在一个分布式的环境中,从设计之初就考虑到了这一点。(6)灵活性:具备多个案例场景。数字、文本、地理位置、结构化、非结构化。所有的数据类型都欢迎。(7)HADOOP&SPARK:Elasticsearch+Hadoop2.Elasticsearch是一个高度可伸缩的开源全文搜索和分析引擎。它允许您快速和接近实时地存储、搜索和分析大量数据。这里有一些使用日asticsearch的用例:(1)
18、你经营一个网上商店,你允许你的顾客搜索你卖的产品。在这种情况下,您可以使用日asticsearch来存储整个产品目录和库存,并为它们提供搜索和自动完成建议.(2)你希望收集日志或事务数据,并希望分析和挖掘这些数据,以查找趋势、统计、汇总或异常。在这种情况下,你可以使用loghide(Elasticsearch/loghide/Kibana堆栈的一 分)来收集、聚合和解析数据,然后让loghide将这些数据输入到日asticsearch中。一旦数据在日asticsearch中,你就可以运行搜索和聚合来挖掘你感兴趣的任何信息。(3)你运行一个价格警报平台,允许精通价格的客户指定如下规则:“我有兴趣
19、购买特定的电子设备,如果下个月任!可供应商的产品价格低于X美元,我希望得到通知。在这种情况下,你可以抓取供应商的价格,将它们推入到Elasticsearch中,并使用其反向搜索(PerWator)功能来匹配价格走势与客户查询,并最终在找到匹配后将警报推送给客户。(4)你有分析/业务智能需求,并希望快速调查、分析、可视化,并对大量数据提出特别问题(想想数百万或数十亿的记录)。在这种情况下,你可以使用日asticsearch来存储数据,然后使用Kibana(Elasticsearch/loghide/Kibana堆栈的一部分)来构建自定义仪表板,以可视化对您来说很重要的数据的各个方面。此外,还可以
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 2021 Java 试题 ElasticSearch 30
限制150内