elasticsearch面试八股文

文章目录

es的存储和更新机制

Elasticsearch(ES)是一个开源的分布式搜索和分析引擎,其存储架构和更新机制如下:

存储架构:

索引(Index) :ES的数据组织单元是索引,每个索引可以包含多个类型(Types),类似于数据库中的表。索引是由一个或多个分片(Shard)组成的,用于将数据水平分割和分布在集群中的多个节点上。
分片(Shard) :每个索引可以被分为多个分片,每个分片是一个独立的工作单元,包含部分数据。分片允许数据分布在集群的多个节点上,提高了性能和可伸缩性。
副本(Replica) :每个分片可以有零个或多个副本。副本是分片的完全复制,用于提供冗余和故障恢复。副本也可以用于负载均衡查询。

更新机制:

Near Real-Time(NRT) :ES采用了近实时的更新机制,即文档的索引和搜索操作不会立即生效,而是需要经过一小段时间的延迟。默认情况下,ES的刷新间隔是1秒钟,因此写入的数据在1秒后才能被搜索到。这种机制可以提高吞吐量和性能。
索引操作(Indexing) :当需要更新一个文档时,ES会先检查该文档是否已经存在于索引中。如果文档不存在,则会创建新的文档并将其添加到合适的分片上。如果文档已经存在,则会进行更新操作,即先标记旧文档为删除,然后再创建一个新的文档版本。这样做是为了保留历史版本,并支持版本控制和文档回滚。
分布式协调 :当有多个副本时,ES使用Raft一致性算法来协调各个副本之间的写入操作,确保数据的一致性和可靠性。

总结起来,Elasticsearch的存储架构是由索引、分片和副本组成的,利用分布式的方式将数据分散在多个节点上。更新机制采用近实时的方式,通过索引操作和分布式协调来处理文档的更新和写入操作。这使得ES具备高性能、可伸缩和容错能力。


说一下raft算法

Raft是一种分布式一致性算法,用于解决分布式系统中的复制日志问题。它旨在提供容错性和易理解性,并通过选举机制来确保系统的可用性。

以下是Raft一致性算法的基本原理:

领导者选举:在一个Raft集群中,每个节点可能处于三种状态:领导者(leader)、追随者(follower)和候选人(candidate)。初始时,所有节点都是追随者。当追随者未能接收到领导者的心跳消息时,会发起选举变成候选人,并请求其他节点投票支持。如果候选人赢得了大多数节点的选票,就成为新的领导者。

日志复制:领导者负责接收客户端的请求并将其转化为日志条目。每个节点都维护一个日志,其中包含按顺序编号的日志条目。领导者将新的日志条目复制到它的追随者节点上,一旦大多数节点确认接收并复制该日志条目,就认为该操作提交成功。

容错性:Raft通过日志复制和选举机制实现容错性。如果一个领导者失效,集群中的其他节点会进行选举以选择一个新的领导者。只有在大多数节点都正常工作的情况下,才能进行日志条目的提交。

安全性:Raft通过在选举过程中使用随机超时时间和限制选举过程中票数的增长速率来防止选举过程中的活锁(例如,若干个候选人无法取得胜利)。此外,任何一个节点只能接受最新的日志条目,确保了数据的一致性。

总体而言,Raft算法提供了一种可靠的方式来实现分布式系统中的一致性。它通过领导者选举、日志复制和容错机制来确保数据的一致性和集群的可用性。由于其易理解的特点,Raft在分布式系统领域广泛应用,并成为了Paxos算法的有效替代方案。


相关推荐
洛卡卡了9 小时前
我们在用 AI 写代码时,为什么建议要好好维护 AGENTS.md 呢?
面试·agent·claude
PBitW9 小时前
GPT训练我的第三天,明白了应该咋说满分回答!😕😕😕
前端·javascript·面试
自由路飞15 小时前
RAG 混合检索深挖:BM25 和向量分数为什么不能直接相加?
面试
未秃头的程序猿15 小时前
告别"if-else地狱"!Java 21模式匹配,代码优雅了10倍
java·后端·面试
阳光是sunny1 天前
Vue 项目怎么做用户行为全链路监控?轻量插件方案详解
前端·面试·架构
蝎子莱莱爱打怪1 天前
DSpark 讲透:DeepSeek 不换模型,硬把 V4 提速 85%,是怎么做到的?
人工智能·面试·程序员
大大大大晴天1 天前
Hudi Metadata Table 与 Hive Sync (HMS)怎么选?
大数据
手可摘星辰7772 天前
一次线上FlinkCDC异常排查复盘
大数据·flink
程序员七平2 天前
面试官:你说你Vibe Coding手拿把掐,那 Claude Code 用户级、项目级、本地级配置怎么隔离?
面试
大大大大晴天2 天前
Hudi技术内幕:Metadata Table原理与实践
大数据