博客
关于我
Elasticsearch面试题
阅读量:787 次
发布时间:2023-01-24

本文共 3139 字,大约阅读时间需要 10 分钟。

Elasticsearch面试题解析与技术要点

为什么要使用Elasticsearch?

随着企业数据的快速增长和业务扩展,传统的关系型数据库在处理大量数据时会面临效率低下的问题。特别是在需要频繁进行模糊查询的情况下,索引可能被忽略,forcing queries to perform full table scans,导致在大型数据库中效率极低。Elasticsearch通过构建全文索引,优雅地解决了这一问题。我们可以将常用查询字段(如电商系统中商品的名称、描述、价格和ID等)存储到Elasticsearch的索引库中,从而大幅提升查询速度。


Elasticsearch主节点选举流程?

Elasticsearch的主节点选举由ZenDiscovery模块负责,主要包括Ping和Unicast两个模块。具体流程如下:

  • Elasticsearch会对所有可以作为主节点的节点(node.master: true)进行排序。每个节点会将其已知的节点列表排序,并选出第一个节点作为潜在的主节点。
  • 如果某个节点接收到足够的票数(达到n/2+1,其中n为可选主节点数量),并且该节点也选举自己,那么这个节点即为新的主节点。
  • 主节点负责集群管理,包括节点和索引的操作,不直接管理文档级别内容。
  • data节点可以关闭HTTP功能。
  • 如果出现脑裂问题,可能的原因包括网络延迟、节点负载过高和内存回收压力过大。解决方案包括适当配置的ping_timeout、minimum_master_nodes以及将主节点和数据节点分离,以避免误判和性能问题。


    Elasticsearch集群脑裂问题?

    成因

    • 网络问题:集群间的延迟可能导致某些节点无法访问主节点,从而触发选举新的主节点。
    • 节点负载:主节点承担大量请求,可能无法及时响应其他节点,导致误判。
    • 内存回收:data节点上的ES进程占用内存过大,触发大规模内存释放,造成服务失效。

    解决方案

    • 减少误判:通过 Tune discovery.zen.ping_timeout(如从3s调整为6s)减少误判。
    • 选举触发:设置 discovery.zen.minimum_master_nodes 为1,确保选举发生。
    • 角色分离:配置 master 和 data 节点,避免单节点承担过多角色。

    Elasticsearch索引文档流程?

    Elasticsearch的文档生命周期管理分为以下几个关键环节:

  • 初始索引

    • 指定文档ID或通过路由(如hash(document_id) % num_of_primary_shards)分发到不同的分片。
    • 文档内容首先写入Memory Buffer,并定期(如每1秒)刷新到Filesystem Cache。
    • 若刷新触发(如每30分钟或translog达到512MB),则内容写入磁盘,创建新段,并刷新到磁盘。
  • 文档删除

    • 文档不会真正被删除,而是标记为删除(通过.del文件)。
    • 删除操作不会立即生效,直到段合并或新文档添加时,该文档会被排除在外。
  • 文档更新

    • 新文档会生成新的版本号,旧版本文档会在.del文件中被标记为删除。
    • 旧文档仍能查询,但会在结果中被过滤。

  • Elasticsearch搜索流程?

    Elasticsearch搜索分为两个阶段:

  • 查询阶段(Query Then Fetch)

    • 查询广播到所有分片,分片本地执行,利用Filesystem Cache。
    • 协调节点合并结果,生成全局排序后的优先队列。
  • 取回阶段(Fetch)

    • 协调节点确定需要取回的文档,向相关分片提交GET请求。
    • 文档被加载并丰富,返回给协调节点,最终返回给客户端。
  • DFS Query Then Fetch方法结合了单副本路由和预查询,提升文档相关性评分,但可能增加性能开销。


    Elasticsearch部署优化?

    在Linux环境下,优化Elasticsearch表现:

  • 内存管理

    • 建议分配64GB以上内存,尽量避免低于8GB。
    • JVM堆内存设置为局部匹配,使用相同的版本和配置。
  • 存储设备

    • 适用SSD提升性能。
    • 避免跨数据中心部署,保持集群在近地理位置。
  • GC优化

    • 避免不必要的缓存清除,定期监控内存使用趋势。
    • 设置合理的垃圾回收参数,避免频繁full GC。
  • 网络优化

    • 增加文件描述符数目(如64000),减少socket资源冲突。-icontrol�自适应参数设置,避免集群跨地理位置。
  • 性能调优

    • 通过index.refresh_interval(如30s)延迟刷新,提升性能。
    • 关闭副本索引(如设置index.number_of_replicas: 0)在批量导入时。
  • 监控工具

    • 配置Logstash、Graylog和Kibana进行日志和性能监控。
    • 使用Elasticsearch自己提供的监控插件进行集群状态跟踪。

  • Elasticsearch GC注意事项?

    Elasticsearch的内存管理与垃圾回收机制需要特别注意:

  • 倒排词典索引

    • 常驻内存,无法GC,需监控segment memory增长。
  • 缓存管理

    • 设置合理的缓存大小,结合最坏场景判断内存需求。
    • 避免主动清理缓存,采用更智能的内存管理策略。
  • 避免高并发查询

    • 避免返回大量结果集的搜索和聚合,采用scan & scroll进行分批处理。
  • 集群GC问题

    • 大规模集群可考虑分拆为多个集群,通过tribe node连接,避免单点故障。

  • Elasticsearch聚合大数据量?

    Elasticsearch采用cardinality度量近似聚合,基于HLL算法实现。该度量可配置精度,灵活应对小数据集或大规模唯一值问题。


    Elasticsearch一致性问题?

    Elasticsearch支持通过版本号和replication设置实现一致性:

  • 乐观并发

    • 应用层控制版本,确保写操作不冲突。
  • 写操作一致性

    • 默认为quorum模式,写入必须在大多数可用分片完成后才能成功。
    • 失败的副本会触发重建,确保数据一致性。
  • 读操作一致性

    • 设置replication为sync,确保查询完成后返回最新版本。
    • 通过设置/search参数_preference: primary,强制只从主分片查询。

  • Elasticsearch集群状态监控?

    推荐使用:

  • elasticsearch-head插件:实时监控集群健康和性能指标。
  • Kibana:分析历史数据和性能趋势。
  • Prometheus:结合Grafana进行扩展监控。
  • ELK栈:集成全链路监控和日志分析。

  • Elasticsearch与字典树?

    字典树(Trie)作为Elasticsearch的核心组件之一,用于提升查询效率:

  • 结构特点

    • 每个节点仅包含一个字符。
    • 从根节点到某节点的路径即为对应的字符串。
    • 子节点字符互不相同。
  • 应用场景

    • 文本词频统计。
    • 实时参数查询优化。
    • 保存大量串结构数据。

  • Elasticsearch基础概念?

    回答关键概念:

  • 集群

    • 一组节点共同存储数据,支持联合索引和搜索。
  • 节点

    • 集群中的单个服务器,负责数据存储和索引操作。
  • 索引

    • 类似数据库的“数据库”,定义多种类型,映射到主分片和副本分片。
  • 文档

    • 类似数据库中的“行”,可包含多种字段和结构。
  • 类型

    • 索引中的逻辑分类,灵活定义,根据用途注销。

  • Elasticsearch倒排索引?

    倒排索引是Elasticsearch的核心,用于快速定位相关文档:

    • 倒排索引关联关键词和文档,存储在倒排表中。
    • 查询时,将搜索内容分词,通过倒排表查找相关文档。
    • 与正向索引配合使用,实现快速的高效搜索。

    转载地址:http://leeyk.baihongyu.com/

    你可能感兴趣的文章
    15种下载文件的方法&文件下载方法汇总&超大文件下载
    查看>>
    anaconda、python卸载后重装以及anaconda--443
    查看>>
    AWVS工具太顶了,漏洞扫描工具AWVS介绍及安装教程
    查看>>
    CentOS 系列:CentOS 7 使用 virt-install + vnc 图形界面/非图形界面 创建虚拟机
    查看>>
    CentOS 系列:CentOS 7文件系统的组成
    查看>>
    CentOS系列:【Linux】CentOS7操作系统安装nginx实战(多种方法,超详细)
    查看>>
    CSDN----Markdown编辑器
    查看>>
    Docker部署postgresql-11以及主从配置
    查看>>
    EnvironmentNotWritableError: The current user does not have write permissions to the target environm
    查看>>
    Hyper-V系列:微软官方文章
    查看>>
    Java系列:【注释模板】IDEA中JAVA类、方法注释模板教程
    查看>>
    kali安装docker(亲测有效)
    查看>>
    Linux系列:Linux目录分析:[/] + [/usr] + [/usr/local] + [/usr/local/app-name]、Linux最全环境配置 + 动态库/静态库配置
    查看>>
    mysql系列:远程连接MySQL错误“plugin caching_sha2_password could not be loaded”的解决办法
    查看>>
    Nessus扫描结果出现在TE.IO或者ES容器结果查看问题解决方案
    查看>>
    Nmap端口服务 之 CentOS7 关于启动Apache(httpd)服务、telnet服务、smtp服务、ftp服务、sftp服务、snmp服务
    查看>>
    PHP系列:PHP 基础编程 2(时间函数、数组---实现登录&注册&修改)
    查看>>
    PHP系列:使用PHP实现登录注册功能的完整指南
    查看>>
    Python&aconda系列:cmd/powershell/anaconda prompt提示“系统找不到指定的路径”(亲测有效)
    查看>>
    Python&aconda系列:conda踩坑记录2.UnsatisfiableError: The following specifications were found to be incompa
    查看>>