一起来学ES —— Bulk剖析

简介: ### 背景 + Bulk请求是ES常用的一种multi-document请求,其处理比较复杂,之前一直搞不清请求的处理逻辑,今天就从源码入手,仔细剖析一下其执行逻辑。 ### 时序分析 + 简单而言,Bulk的时序如下图所示,Http节点只将包转为TCP,ingest节点进行些预设的前置处理,然后按shard拆分,再把按shard拆开的bulk再发到真实的data节点上,最后由data

背景

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

时序分析

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

具体流程

  1. RestControllor 接收请求,dispatch到对应的handler上
    IMAGE
  2. BaseRestHandler 调用 RestBulkAction 进行前置处理,请求转为 BulkRequest
    IMAGE
  3. NodeClient根据 ActionModule 注册的映射关系,找到TransportBulkAction作为tcp的处理逻辑
  4. TransportBulkAction 检查自己是不是 ingest node,如果不是就转发
    IMAGE
  5. Ingest Node接收到请求,执行pipeline
    IMAGE
  6. TransportBulkAction调用BulkOperationBulkRequest拆为BulkShardRequest,转发到DataNode
    IMAGE
  7. Primary Data Node收到请求,转为ReplicationOperation操作,调用TransportShardBulkAction进行主副本的依次执行
    IMAGE
  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 夏日来袭
目录
相关文章
|
Java Spring
【Spring Boot 源码学习】走近 AutoConfigurationImportSelector
本篇笔者带大家走近 AutoConfigurationImportSelector,从整体上了解 Spring Boot 自动装配功能
342 2
【Spring Boot 源码学习】走近 AutoConfigurationImportSelector
|
存储 搜索推荐 NoSQL
ES 和 clickhouse 对比选型
clickhouse 是列式存储所以无法进行全文检索,所以更适合数据分析的需求。elasticsearch更适合高并发并且查询返回结果较少的全文检索,如搜索引擎。
3936 0
|
7月前
|
机器学习/深度学习 编解码 人工智能
计算机视觉五大技术——深度学习在图像处理中的应用
深度学习利用多层神经网络实现人工智能,计算机视觉是其重要应用之一。图像分类通过卷积神经网络(CNN)判断图片类别,如“猫”或“狗”。目标检测不仅识别物体,还确定其位置,R-CNN系列模型逐步优化检测速度与精度。语义分割对图像每个像素分类,FCN开创像素级分类范式,DeepLab等进一步提升细节表现。实例分割结合目标检测与语义分割,Mask R-CNN实现精准实例区分。关键点检测用于人体姿态估计、人脸特征识别等,OpenPose和HRNet等技术推动该领域发展。这些方法在效率与准确性上不断进步,广泛应用于实际场景。
1031 64
计算机视觉五大技术——深度学习在图像处理中的应用
|
数据挖掘 UED
ClkLog埋点分析系统支持漏斗分析
漏斗分析是基于事件的一种分析模型。 漏斗分析主要是对一个多步骤的场景进行的每一步的转化数据分析。可以理解为是从顶部(广泛数据)到底部(目标数据)逐步筛选和转化分析的过程。
ClkLog埋点分析系统支持漏斗分析
|
监控 NoSQL 算法
Redis Sentinel(哨兵)详解
Redis Sentinel(哨兵)详解
511 4
|
数据采集 数据可视化 大数据
【优秀python大屏案例】基于python flask的前程无忧大数据岗位分析可视化大屏设计与实现
本文介绍了一个基于Python Flask框架的前程无忧大数据岗位分析可视化大屏系统,该系统通过爬虫技术采集招聘数据,利用机器学习算法进行分析,并以可视化大屏展示,旨在提高招聘市场数据分析的效率和准确性,为企业提供招聘决策支持和求职者职业规划参考。
586 2
|
Web App开发 JavaScript Java
elasticsearch学习五:springboot整合 rest 操作elasticsearch的 实际案例操作,编写搜索的前后端,爬取京东数据到elasticsearch中。
这篇文章是关于如何使用Spring Boot整合Elasticsearch,并通过REST客户端操作Elasticsearch,实现一个简单的搜索前后端,以及如何爬取京东数据到Elasticsearch的案例教程。
853 0
elasticsearch学习五:springboot整合 rest 操作elasticsearch的 实际案例操作,编写搜索的前后端,爬取京东数据到elasticsearch中。
|
传感器 网络协议
CCF推荐B类会议和期刊总结:(计算机网络领域)
中国计算机学会(CCF)推荐的B类会议和期刊在计算机网络领域具有较高水平。本文总结了所有B类会议和期刊的详细信息,包括全称、出版社、dblp文献网址及研究领域,涵盖传感器网络、移动网络、网络协议等多个方向,为学者提供重要学术交流平台。
CCF推荐B类会议和期刊总结:(计算机网络领域)
|
消息中间件 存储 数据可视化
中间件日志收集与流处理
【6月更文挑战第17天】
612 3
|
Java Maven
如何导出github项目并生成jar包
如何导出github项目并生成jar包
318 0