MST
星途 面试题库

面试题:ElasticSearch读写原理之写入流程

请详细阐述ElasticSearch写入文档的基本流程,包括涉及到的主要组件以及每个组件在流程中的作用。
28.8万 热度难度
数据库ElasticSearch

知识考点

AI 面试

面试题答案

一键面试

1. 客户端发送请求

客户端通过RESTful API将写入文档的请求发送到Elasticsearch集群中的某个节点(通常是负载均衡器分配的一个协调节点)。

2. 协调节点处理请求

  • 作用:接收客户端请求,负责路由请求到合适的主分片所在节点,并处理返回结果。
  • 流程:协调节点根据文档的ID,通过哈希算法计算出该文档应该存储在哪个分片上,然后将请求转发到对应的主分片所在节点。

3. 主分片所在节点处理请求

  • 作用:负责实际的文档写入操作。
  • 流程
    • 写入内存:主分片所在节点接收到请求后,首先将文档写入到内存中的写入缓冲区(write buffer)。
    • 写入文件系统缓存:同时,为了保证数据的持久性,文档会被追加写入到事务日志(translog)中。事务日志存储在文件系统缓存(page cache)中,这样可以快速写入。

4. 数据复制到副本分片

  • 作用:保证数据的高可用性和冗余。
  • 流程:主分片写入成功后,主分片所在节点会将文档复制到该分片的所有副本分片所在节点。副本分片接收到数据后,同样先写入内存中的写入缓冲区,再写入事务日志。

5. 刷新操作(可选但重要)

  • 作用:使数据可被搜索。
  • 流程:默认情况下,写入缓冲区中的数据每1秒会被刷新(flush)到一个新的段(segment)文件中,并写入文件系统,同时清空写入缓冲区。这个过程也被称为refresh。刷新后,新的数据段会被打开,使得文档可以被搜索。

6. 提交操作

  • 作用:确保数据的持久性和一致性。
  • 流程:当事务日志积累到一定大小(默认为512MB)或者每隔30分钟,会触发一次提交(commit)操作。提交操作会将文件系统缓存中的事务日志持久化到磁盘,并生成一个新的提交点(commit point)文件,记录当前已提交的所有段文件。同时,清空事务日志,开始记录新的操作。