往es中写入一条数据的,请求流程
- 人工智能
- 2025-09-08 11:06:02

往 Elasticsearch(ES) 中写入一条数据的请求流程涉及多个步骤,包括客户端请求、节点处理、数据分片和副本同步等。以下是详细的流程解析。
1. 写入数据的请求流程 1.1 客户端发送请求
客户端(如 Kibana、Logstash 或自定义应用)向 Elasticsearch 集群发送写入请求。
请求格式通常为 HTTP PUT 或 POST 请求,例如:
bash
复制
PUT /my_index/_doc/1 { "field1": "value1", "field2": "value2" } 1.2 请求到达协调节点Elasticsearch 集群中的任意节点都可以接收请求,接收请求的节点称为 协调节点(Coordinating Node)。
协调节点负责处理请求的路由和转发。
1.3 确定主分片协调节点根据文档的 _id 和索引的分片规则,计算出文档应该写入的 主分片(Primary Shard)。
计算公式:
bash
复制
shard = hash(_id) % number_of_primary_shards 1.4 转发请求到主分片协调节点将写入请求转发到目标主分片所在的 数据节点(Data Node)。
1.5 主分片写入数据主分片所在的节点接收到请求后,将数据写入本地存储(如 Lucene 索引)。
写入成功后,主分片会将数据同步到所有的 副本分片(Replica Shard)。
1.6 副本分片同步数据主分片将数据同步到副本分片所在的节点。
副本分片写入成功后,向主分片发送确认。
1.7 主分片返回响应主分片收到所有副本分片的确认后,向协调节点返回写入成功的响应。
1.8 协调节点返回客户端协调节点将写入成功的响应返回给客户端。
2. 写入流程的详细步骤
以下是写入流程的详细步骤图示:
复制
客户端 -> 协调节点 -> 主分片 -> 副本分片 -> 主分片 -> 协调节点 -> 客户端客户端发送请求:
客户端向 Elasticsearch 集群发送写入请求。
协调节点接收请求:
协调节点接收请求并确定目标主分片。
主分片写入数据:
主分片所在的节点写入数据。
副本分片同步数据:
主分片将数据同步到副本分片。
主分片返回响应:
主分片收到所有副本分片的确认后,返回响应。
协调节点返回客户端:
协调节点将响应返回给客户端。
3. 写入流程的关键点 3.1 分片路由
Elasticsearch 使用分片路由算法确定文档应该写入哪个主分片。
默认情况下,使用文档的 _id 进行哈希计算。
3.2 数据一致性Elasticsearch 提供了多种数据一致性级别:
quorum:大多数副本分片写入成功(默认)。
all:所有副本分片写入成功。
one:主分片写入成功。
3.3 写入确认客户端可以通过 refresh 参数控制写入后的刷新行为:
refresh=true:立即刷新索引,使写入的数据可搜索。
refresh=wait_for:等待刷新完成后再返回响应。
refresh=false:不刷新索引,数据稍后可搜索。
4. 写入流程的示例
以下是一个写入数据的示例:
4.1 客户端请求bash
复制
PUT /my_index/_doc/1 { "field1": "value1", "field2": "value2" } 4.2 协调节点处理协调节点计算目标主分片,假设为 shard 0。
4.3 主分片写入主分片 shard 0 所在的节点写入数据。
4.4 副本分片同步主分片将数据同步到副本分片 shard 0 所在的节点。
4.5 返回响应主分片收到所有副本分片的确认后,返回响应:
json
复制
{ "_index": "my_index", "_type": "_doc", "_id": "1", "_version": 1, "result": "created", "_shards": { "total": 2, "successful": 2, "failed": 0 }, "_seq_no": 0, "_primary_term": 1 }5. 总结
往 Elasticsearch 中写入数据的流程涉及客户端请求、协调节点路由、主分片写入和副本分片同步。
通过合理配置分片、副本和数据一致性级别,可以优化写入性能和数据可靠性。
理解写入流程的关键点,有助于排查和解决写入问题。
通过以上内容,可以轻松掌握 Elasticsearch 写入数据的请求流程!
开启新对话
往es中写入一条数据的,请求流程由讯客互联人工智能栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“往es中写入一条数据的,请求流程”