前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >从0到1了解ElasticSearch文档写入

从0到1了解ElasticSearch文档写入

原创
作者头像
爱拼才会赢
修改2021-10-21 21:10:59
9251
修改2021-10-21 21:10:59
举报

简介

这篇文章主要讨论一下ElasticSearch文档写入的关键步骤以及在使用ES Client使用过程的一些需要主要的问题。如果对ElasticSearch的基础概念不熟悉的同学可以先看一下上一篇文章【从0到1理解ElasticSearch文档写入和检索原理】

创建索引

创建索引脚本

#创建索引 PUT /product_v1?pretty #定义索引的mapping PUT /product_v1/_doc/_mapping?pretty { "_doc": { "dynamic": false, "properties": { "productOuterId": { "type": "keyword" }, "productName": { "type": "text", "fields": { "raw": { "type": "keyword" } } }, "productPrice": { "type": "long" }, "createTime": { "type": "date", "format": "yyyy-MM-dd HH:mm:ss||yyyy-MM-dd||epoch_millis" } } } }

注意点

数据写入

Curl写入

curl -X PUT "localhost:9200/product_v1/_doc/1?pretty" -H 'Content-Type: application/json' -d' { "productOuterId": "00001", "productName": "男装 柔软高领T恤(长袖初秋)", "productPrice": 130, "createTime": "2021-10-18 13:00" } '

es Client写入

Es Client(<6.8.5 和 <7.5 )自身的死锁

1.ES Client的内置scheduler线程池定时调用线程A来flush()数据 2.线程A阻塞等待数据写入任务,写入数据网络异常会尝试retry(),retry()也是放入scheduler线程池中执行 3.但scheduler线程池的coreSize=1,线程A正在使用此线程,导致retry()任务一直阻塞等待空闲线 4.Retry()任务不执行,那么线程A的flush()任务也一直卡死等待

ES issue:

https://github.com/elastic/elasticsearch/issues/47599

https://github.com/elastic/elasticsearch/issues/44556

ES 客户端bulkIndex流程细节,如下:

ES Rest Client
ES Rest Client

ES 6.8.5/7.5 如何修复上述DeadLock?官方采用:初始化两个scheduler,分别给flush() 和retry()来使用

https://github.com/jakelandis/elasticsearch/commit/b7b59329c247ff61715f21f5c0f409a059249909

写入优化

  • 首次批量导入,设置 index.number_of_replicas = 0关闭副本,然后在写入完成后再开启副本,恢复过程本质上只是一个字节到字节的网络传输;
  • 加大translog flush间隔,目的是降低iops、writeblock默认是每个请求都持久化到translog, index.translog.durability:requestindex.translog.durability:async表示translog的刷盘策略按sync_interval周期进行③加大 index.refresh_interval的间隔,降低I/O,降低segment merge请求;
  • 调整bulk请求;
  • 段合并优化。

参考资料:

elastic: https://www.elastic.co/guide/en/elasticsearch/reference/6.8/index.html

上一篇:【从0到1理解ElasticSearch文档写入和检索原理】


下一篇:【从0到1快速了解ElasticSearch数据检索】

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 简介
  • 创建索引
    • 创建索引脚本
    • 数据写入
      • Curl写入
        • es Client写入
          • 写入优化
          • 上一篇:【从0到1理解ElasticSearch文档写入和检索原理】
          • 下一篇:【从0到1快速了解ElasticSearch数据检索】
          相关产品与服务
          Elasticsearch Service
          腾讯云 Elasticsearch Service(ES)是云端全托管海量数据检索分析服务,拥有高性能自研内核,集成X-Pack。ES 支持通过自治索引、存算分离、集群巡检等特性轻松管理集群,也支持免运维、自动弹性、按需使用的 Serverless 模式。使用 ES 您可以高效构建信息检索、日志分析、运维监控等服务,它独特的向量检索还可助您构建基于语义、图像的AI深度应用。
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档