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 @ 2023-05-18 23:41  哪都通临时工  阅读(180)  评论(0)    收藏  举报