面试题答案
一键面试并发写入对数据一致性的影响
- 版本冲突:多个写入操作可能尝试修改同一文档的同一版本,导致部分写入操作失败,破坏数据更新的预期一致性。例如,A 操作读取文档版本为 1,B 操作同时读取文档版本也为 1,A 先写入成功版本变为 2,B 再写入时就会因版本不一致报错。
- 数据丢失:在副本同步过程中,如果某些副本写入成功,而部分副本写入失败,且处理不当,可能导致数据丢失。比如主分片写入成功,但部分副本分片写入失败,若没有合适的补偿机制,失败副本的数据就无法与主分片一致。
- 不一致的副本:由于网络延迟、节点故障等原因,副本之间的数据同步可能出现延迟或中断,导致不同副本的数据不一致。例如,一个副本因为网络问题长时间未接收到主分片的更新,与其他及时更新的副本存在数据差异。
ElasticSearch 保障数据一致性的策略及原理
- 乐观并发控制
- 工作原理:Elasticsearch 使用版本号来实现乐观并发控制。每个文档都有一个版本号,每次文档更新时版本号递增。当客户端尝试更新文档时,它必须提供当前文档的版本号。Elasticsearch 会将提供的版本号与存储的版本号进行比较,如果两者相同,则执行更新操作并递增版本号;如果不同,说明文档已被其他操作修改,更新请求将失败,客户端需要重新获取最新版本的文档并再次尝试更新。这种机制允许并发操作,只有在实际更新时才检查版本冲突,提高了系统的并发处理能力。
- 同步复制
- 工作原理:Elasticsearch 支持同步复制策略,在写入数据时,主分片会等待一定数量的副本分片确认写入成功后才向客户端返回成功响应。通过设置
replication
参数为sync
,可以指定需要等待的副本数量(如replicas: 2
表示等待 2 个副本确认)。只有当主分片和指定数量的副本分片都成功写入数据后,这次写入操作才被认为是成功的。这样可以确保在大多数副本上数据是一致的,即使部分副本出现故障,也能保证数据的一致性和可用性。
- 工作原理:Elasticsearch 支持同步复制策略,在写入数据时,主分片会等待一定数量的副本分片确认写入成功后才向客户端返回成功响应。通过设置
- 故障转移与重新同步
- 工作原理:当某个节点发生故障导致副本数据不一致时,Elasticsearch 会自动进行故障转移。主节点会检测到故障节点,并将故障节点上的副本标记为不可用。然后,Elasticsearch 会从其他可用副本中选择一个作为新的副本,并将数据从主分片同步到新的副本,以恢复副本的一致性。这个过程通过内部的副本同步机制实现,确保在故障恢复后所有副本的数据再次保持一致。
- 写入一致性级别
- 工作原理:Elasticsearch 提供了不同的写入一致性级别,如
quorum
、one
、all
等。quorum
表示需要等待大多数分片(主分片 + 副本分片)写入成功;one
表示只要主分片写入成功即可;all
表示所有副本分片都要写入成功。客户端可以根据业务需求选择合适的一致性级别。例如,对于一些对一致性要求不高但追求高写入性能的场景,可以选择one
级别;而对于数据一致性要求严格的场景,则选择quorum
或all
级别。通过这种灵活的设置,在不同场景下平衡了数据一致性和系统性能。
- 工作原理:Elasticsearch 提供了不同的写入一致性级别,如