欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 教育 > 幼教 > 往es中写入一条数据的,请求流程

往es中写入一条数据的,请求流程

2025/2/24 18:16:09 来源:https://blog.csdn.net/C18298182575/article/details/145604261  浏览:    关键词:往es中写入一条数据的,请求流程

往 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. 写入流程的详细步骤

以下是写入流程的详细步骤图示:

复制

客户端 -> 协调节点 -> 主分片 -> 副本分片 -> 主分片 -> 协调节点 -> 客户端
  1. 客户端发送请求

    • 客户端向 Elasticsearch 集群发送写入请求。

  2. 协调节点接收请求

    • 协调节点接收请求并确定目标主分片。

  3. 主分片写入数据

    • 主分片所在的节点写入数据。

  4. 副本分片同步数据

    • 主分片将数据同步到副本分片。

  5. 主分片返回响应

    • 主分片收到所有副本分片的确认后,返回响应。

  6. 协调节点返回客户端

    • 协调节点将响应返回给客户端。


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 写入数据的请求流程!

开启新对话

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词