背景

  • Bulk请求是ES常用的一种multi-document请求,其处理比较复杂,之前一直搞不清请求的处理逻辑,今天就从源码入手,仔细剖析一下其执行逻辑。

时序分析

  • 简单而言,Bulk的时序如下图所示,Http节点只将包转为TCP,ingest节点进行些预设的前置处理,然后按shard拆分,再把按shard拆开的bulk再发到真实的data节点上,最后由data节点进行主副本同步写入。

具体流程

  1. RestControllor 接收请求,dispatch到对应的handler上
  2. BaseRestHandler 调用 RestBulkAction 进行前置处理,请求转为 BulkRequest
  3. NodeClient根据 ActionModule 注册的映射关系,找到TransportBulkAction作为tcp的处理逻辑
  4. TransportBulkAction 检查自己是不是 ingest node,如果不是就转发
  5. Ingest Node接收到请求,执行pipeline
  6. TransportBulkAction调用BulkOperationBulkRequest拆为BulkShardRequest,转发到DataNode
  7. Primary Data Node收到请求,转为ReplicationOperation操作,调用TransportShardBulkAction进行主副本的依次执行
  8. TransportShardBulkAction的具体执行过程为shardOperationOnPrimaryshardOperationOnReplica,执行时直接调用了Engine进行执行。具体代码就不贴了,比较长

线程池分析

  • 在日常中,我们经常遇到由于线程池占满的es_rejected_execution_exception
  • 通过源码可以看到,bulk的线程池为ThreadPool.Names.BULK,全局查找后发现只有TransportShardBulkActionPipelineExecutionService有用。
  • Rest和TransportBulk居然没有用Bulk线程池,很是惊讶。不知道是不是没找到。。。

让搜索更简单


  • ZSearch2.0 服务申请入口:http://search.alipay.com/看我们这二级的域名就知道重要性了吧。
  • 蚂蚁中间件的ZSearch2.0,核心采用了ElasticSearch,原生支持所有的ElasticSearch的操作,具备强大的数据检索和分析能力,自5月份投入试运行以来,已线上服务16个业务方,数据规模在130TB,近2K亿的文档数,QPS稳定在30W左右。 通过数月不断的观察、调优、测试,如今已达到正式上线的标准,欢迎同学们踊跃使用,提出宝贵意见。
  • 后续我们会对Elasticsearch和Lucene做持续优化,欢迎大家来使用,并提出你的需求。
  • 有任何问题可以联系我们(@善仁(xinyu.jxy),@丰坚(yinghao.wyh),@十倍(lvliang.ll),@城破(huabiao.mahb) )
  • 详细介绍请参阅ZSearch2.0 夏日来袭

一起来学ES —— Bulk剖析相关推荐

  1. ES bulk源码分析——ES 5.0

    对bulk request的处理流程: 1.遍历所有的request,对其做一些加工,主要包括:获取routing(如果mapping里有的话).指定的timestamp(如果没有带timestamp ...

  2. es bulk java_ES 操作之批量写-BulkProcessor 原理浅析

    最近对线上业务进行重构,涉及到ES同步这一块,在重构过程中,为了ES 写入 性能考虑,大量的采取了 bulk的方式,来保证整体的一个同步速率,针对BulkProcessor 来深入一下,了解下 是如何 ...

  3. es bulk java_es v6.8.3 bulk 异常

    项目启动正常,使用kibana连接es正常,数据入库会时会报如下异常 org.elasticsearch.client.transport.NoNodeAvailableException: None ...

  4. es bulk java_Java Elasticsearch Bulk API 批量操作

    ES的Bulk API主要用于在单个请求中,批量执行创建.更新.删除文档操作,避免循环发送大量的ES请求. 创建BulkRequest对象 BulkRequest request = new Bulk ...

  5. es bulk update 时间格式

    es创建的json对象的时候, 会把 Date转换为 long 时间戳格式 但是 bulk更新的时候, 如果直接使用 Date格式 会报错, 需要转换为 long时间戳格式 ,才可以进行更新

  6. 一起来学ES —— 浅谈Nested结构

    Nested是什么? 直观的说,Nested实际上就是Object的数组.如下,这个user就是个nested结构 { "user" : [ {"first" ...

  7. es管理kabina_小白学ES 05 - 通过Kibana管理集群服务

    目录 前述步骤: ① 启动Kibana; ② 通过浏览器访问Kibana; ③ 进入Dev Tools(开发者工具)界面. 1 检查集群的健康状况 ES提供了一套_cat API, 可以查看ES中的各 ...

  8. bulk插入 es_ElasticSearch的Bulk操作 ES bulk详解

    elasticsearch bulkApi是什么?和普通的CURD区别在哪里? 1.可以批量对多个索引进行增加或者删除等操作,减少网络请求次数,可以显著的提高索引的速度. 2.CURD只能对单条数据进 ...

  9. 龙叔学ES:elasticsearch扫盲篇

    看完本文 你基本就对elasticsearch有了基本较为全面的了解 (注意哦  本文讲解的都是 ES 7版本之后 的内容) 目录 1.什么是elasticsearch? 2.ES概念.架构.原理 2 ...

最新文章

  1. Open3d学习计划—高级篇 3(点云全局配准)
  2. 九度 1550 分糖果
  3. MyBatis Plus——分页插件【PaginationInnerInterceptor】
  4. 黄金寨景区、缥缈间温泉2019北京推介会成功举办
  5. py第五天,列表的练习,每日菜谱
  6. 项目杂-备注-说明-其他
  7. 如何使用Omni Remover Mac版释放Mac上的空间
  8. Python画一个国旗
  9. 拓端tecdat|R语言动态可视化:制作历史全球平均温度的累积动态折线图动画gif视频图
  10. 用DIB位图显示图像
  11. Front: 电子邮件通讯创业新模式
  12. CentOS配置Nginx官方的Yum源 及yum安装php
  13. 王超(清华大学博士)Linux期末考核
  14. FME将ArcGIS符号化转为CAD填充
  15. python怎么判断质数和合数_什么是质数和合数以及判断方法介绍
  16. 微积分(一)——二重积分与三重积分笔记
  17. 全球与中国量身定制生产线市场深度研究分析报告
  18. 怎么检测计算机硬件好坏,鲁大师如何检测硬件好坏?硬件好坏检测方法介绍
  19. Fluid Mask 抠图 换背景教程
  20. 小程序电商商城怎么搭建?

热门文章

  1. Thymeleaf 表单回填
  2. NVIDIA JETSON TX1刷机重装系统笔记
  3. C/C++编程学习 - 第4周 ⑦ 判断是否为两位数
  4. 用python全方位解析2019新冠疫情词云图
  5. C# 在子窗口显示已经隐藏的主窗口,简单实用
  6. 在滴滴云 DC2 云服务器上搭建 MongoDB 实战
  7. dtree做权限控制
  8. SpringBoot使用拦截器实现Restful URL权限拦截
  9. 云服务器liunx系统怎么安装,云服务器怎么安装linux系统
  10. Android 集成友盟推送方案(1)