elasticsearch写入流程

Elasticsearch的写入文档过程是客户端向Elasticsearch服务发送写入请求,经过多个组件协同工作。

具体步骤如下:

  1. 客户端向Elasticsearch发送写入请求。请求中需要包含以下信息:
  • 索引名称和类型:指明要写入到哪个索引、哪个类型;
  • 文档ID:指明要写入的文档唯一标识符;
  • 数据:要写入的文档内容,通常是JSON格式。
  1. 请求首先会被发送到Elasticsearch的协调节点,协调节点负责控制索引中的分片,它的工作包括:
  • 确定要写入文档的主分片和副本分片的位置;
  • 向主节点发送写入请求;
  • 副本分片复制主分片的写操作。
  1. 写入请求到达主节点后,主节点会采取以下步骤:
  • 生成全局唯一的递增版本号(_version);
  • 在内存中创建文档,并为其分配一个唯一的文档ID(如果没有指定);
  • 将文档写入主分片。
  • 主分片写入成功后,主节点会向客户端发送写入成功的响应。同时,主节点还会将写入操作同步到分配给它的所有副本分片上。
  1. 副本分片接收到同步请求后,会将对应的文档复制到它自己本地的分片中。这样,副本分片就与主分片保持了一致性。

分片写入数据具体步骤如下:

  1. 当分片所在的节点接收到来自协调节点的请求后,会将请求写入到 Memory Buffer,然后定时(默认是每隔 1 秒)写入到 Filesystem Cache,这个从 Momery Buffer 到 Filesystem Cache 的过程就叫做 refresh;

  2. 当然在某些情况下,存在 Momery Buffer 和 Filesystem Cache 的数据可能会丢失,ES 是通过 translog 的机制来保证数据的可靠性的。其实现机制是接收到请求后,同时也会写入到 translog 中,当 Filesystem cache 中的数据写入到磁盘中时,才会清除掉,这个过程叫做 flush;

  3. 在 flush 过程中,内存中的缓冲将被清除,内容被写入一个新段,段的 fsync将创建一个新的提交点,并将内容刷新到磁盘,旧的 translog 将被删除并开始一个新的 translog。

  4. flush 触发的时机是定时触发(默认 30 分钟)或者 translog 变得太大(默认为 512M)时;

posted @   哪都通临时工  阅读(144)  评论(0编辑  收藏  举报
编辑推荐:
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
点击右上角即可分享
微信分享提示