MST
星途 面试题库

面试题:ElasticSearch主分片节点如何在常规操作下保障数据一致性

请详细阐述在ElasticSearch中,主分片节点在常规的增删改操作过程中,是通过哪些机制来保障数据一致性的。
14.7万 热度难度
数据库ElasticSearch

知识考点

AI 面试

面试题答案

一键面试

写操作流程及一致性保障机制

  1. 请求接收:客户端发送增删改请求到任意一个节点,该节点称为协调节点(Coordinating Node)。
  2. 路由计算:协调节点根据文档的ID计算出该文档应存储的主分片位置,并将请求转发到对应的主分片所在节点。
  3. 主分片操作:主分片所在节点接收到请求后,执行具体的增删改操作。在操作过程中,通过以下机制保障一致性:
    • 预写式日志(Write - Ahead Log,WAL):也叫translog。主分片节点在执行具体的文档操作前,先将操作写入到translog中。这样即使在操作过程中节点发生故障,也可以通过重放translog来恢复数据,保证数据不会丢失。例如,当进行一个文档的新增操作时,先将新增操作记录到translog,再实际写入文档数据到Lucene索引。
    • 乐观并发控制:Elasticsearch使用版本号来实现乐观并发控制。每个文档都有一个版本号,每次文档被修改时版本号递增。当客户端发起写操作时,会带上预期的版本号。主分片节点在执行操作前,会检查当前文档的版本号是否与客户端提供的版本号一致。如果一致,则执行操作并更新版本号;如果不一致,说明文档在客户端获取版本号后已被其他操作修改,此时主分片节点会返回版本冲突错误,客户端需要重新获取最新版本并再次尝试操作。
  4. 副本分片同步:主分片操作成功后,主分片节点会将操作同步到所有相关的副本分片。同步过程同样基于上述的WAL机制,副本分片接收到主分片的操作日志后,按照日志记录执行相同的操作,从而保证副本分片与主分片的数据一致性。只有当所有副本分片都成功同步操作后,主分片才会向协调节点返回操作成功的响应。

读操作一致性保障机制

  1. 读请求分发:客户端发送读请求到任意节点,协调节点根据请求类型(如按ID读、搜索等)决定从主分片还是副本分片读取数据。
  2. 强一致性读:如果客户端要求强一致性读(通过设置 consistency 参数为 all),协调节点会等待所有副本分片都同步完成后,再从主分片读取数据。这确保了读取到的数据是最新且一致的,但会增加读操作的延迟。
  3. 最终一致性读:默认情况下,读操作采用最终一致性策略。协调节点可以从主分片或副本分片中读取数据。虽然副本分片可能存在短暂的数据延迟,但随着副本同步机制的不断运行,最终所有分片的数据会达到一致。例如,在写操作完成后,由于网络等原因副本分片同步可能稍有延迟,此时从副本分片读取的数据可能不是最新的,但过一段时间后所有分片数据将保持一致。