Elasticsearch 实战面试题,每个题目都会单独解析

发布于:2025-05-21 ⋅ 阅读:(12) ⋅ 点赞:(0)

Elasticsearch 在 Java 中最常用的客户端是什么?如何初始化一个 RestHighLevelClient?如何用 Spring Boot 快速集成 Elasticsearch?Spring Data Elasticsearch 如何定义实体类与索引的映射?

ES的倒排索引和正排索引的区别及适用场景?为什么倒排索引适合全文搜索?

Elasticsearch 分页查询的 from+size 有什么缺陷?如何优化深度分页?比较scroll API与search_after的差异

如何通过 Spring Data Elasticsearch 实现复杂查询(如多条件聚合)?商品搜索场景下,如何设计索引映射?说明字段类型选择依据(text/keyword/nested等)?

Elasticsearch 写入性能优化有哪些常见手段?

如何保证 Kafka 数据实时同步到 Elasticsearch?

ES分片(Shard)和副本(Replica)的作用?如何合理分配?

ES的Refresh、Flush、Merge操作对性能的影响?

ES如何实现近实时(NRT)搜索?

ES聚合查询的Terms和Cardinality区别?

ES的深分页(Deep Pagination)性能问题如何优化?

如何设计ES的冷热数据分离架构?

Elasticsearch 集群如何实现高可用?如何避免脑裂问题?如果出现脑裂如何恢复?

ES的向量检索(Vector Search)如何实现?

如何通过ES实现SQL风格的查询?

如何设计一个支持千万级数据量的搜索系统(结合 MySQL 和 ES)?ES与关系型数据库(MySQL)数据同步方案?如何保证数据库与Elasticsearch的双写一致性?对比采用事务日志与CDC方案的优劣

Elasticsearch 如何实现跨数据中心的数据同步?

ES 在大查询场景下导致 GC 频繁,如何定位和解决?

慢查询分析,如何通过_profile API分析查询性能瓶颈?解释返回结果中的各阶段耗时含义

集群恢复,当节点离线导致分片状态为UNASSIGNED时,如何进行分片重分配?

当出现Elasticsearch bulk写入性能瓶颈时,可以从哪些方面进行优化


Elasticsearch 架构图

+-------------------------------------------------------------------------------------------+
|                                          Elasticsearch Cluster                           |
|                                                                                           |
|  +----------------+       +----------------+       +----------------+       +----------------+  
|  |    Node 1      |       |    Node 2      |       |    Node 3      |       |    Node N      |  
|  |  (Master)      |       |  (Data-Hot)    |       |  (Data-Cold)   |       |  (Coordinator) |  
|  +----------------+       +----------------+       +----------------+       +----------------+  
|  | - 主节点       |       | - 热数据节点   |       | - 冷数据节点   |       | - 协调节点     |  
|  | - 管理集群状态 |       | - SSD 存储     |       | - HDD 存储     |       | - 路由查询请求 |  
|  +----------------+       +----------------+       +----------------+       +----------------+  
|          ▲                      ▲  ▲                      ▲                          ▲          
|          |                      |  |                      |                          |          
|          | 写入/查询请求        |  | 数据分片(Shard)    | 副本分片(Replica)      |          
|          |                      |  |                      |                          |          
|  +----------------+             |  |             +----------------+                  |          
|  |   Client       |-------------+  +-------------|   Client       |------------------+          
|  +----------------+                              +----------------+                             
|         | 写入数据到协调节点                                | 发起查询请求                         
|         |                                                   |                                    
|  +----------------+                                  +----------------+                         
|  |  数据源        |                                  |  可视化工具    |                         
|  |  (MySQL/Logs)  |                                  |  (Kibana)      |                         
|  +----------------+                                  +----------------+                         
|                                                                                           |
+-------------------------------------------------------------------------------------------+

核心组件说明

1. 节点角色
节点类型 功能描述
主节点(Master) 管理集群状态(索引创建/删除、节点加入/退出),不处理数据读写,避免单点故障需配置多个。
数据节点(Data) 存储分片数据,分为热节点(SSD,处理实时写入)和冷节点(HDD,存储历史数据)。
协调节点(Coordinator) 接收客户端请求,路由到相关分片,聚合结果返回(可独立或由数据节点兼任)。
Ingest 节点 预处理数据(如解析日志、富化字段),非必需角色,可由其他节点兼任。
2. 分片与副本
概念 描述
分片(Shard) 索引的横向拆分单元(如一个索引拆分为3个主分片),支持分布式存储和并行计算。
副本(Replica) 分片的副本,保障高可用(主分片故障时副本提升为主分片)和负载均衡(副本处理读请求)。
3. 数据流
  1. 写入流程
    客户端 → 协调节点 → 路由到主分片 → 同步副本分片 → 返回写入成功
    
  2. 查询流程
    客户端 → 协调节点 → 广播查询到相关分片 → 聚合结果 → 返回最终结果
    
4. 冷热数据分离架构
  • 热节点集群:处理实时写入和频繁查询(如近7天日志),使用高性能硬件(SSD、高CPU)。
  • 冷节点集群:存储历史数据(如30天前日志),使用大容量HDD和低功耗硬件。
  • ILM(索引生命周期管理):自动滚动索引(hot → warm → cold → delete)。

关键特性

  1. 分布式扩展:通过分片实现水平扩展,支持PB级数据。
  2. 近实时(NRT):数据写入后1秒(默认Refresh间隔)可被搜索。
  3. 高可用:副本分片保障数据冗余,主节点选举避免单点故障。
  4. 多租户:通过索引和别名机制隔离不同业务数据。

典型集成场景

+----------------+     +----------------+     +-------------------+
|  数据源        |     |  消息队列       |     |  可视化与分析      |
|  (MySQL/日志)  | →   |  (Kafka)      | →   |  (Kibana)         |
+----------------+     +----------------+     +-------------------+
       ↓                     ↓
+----------------+     +----------------+
|  数据同步工具   |     |  Elasticsearch  |
|  (Logstash/Canal)| → |  Cluster       |
+----------------+     +----------------+

此架构图可用于面试中解释 ES 的核心设计理念,或在实际项目中指导集群规划和性能优化。