一起来学ES —— Bulk剖析
背景
- Bulk请求是ES常用的一种multi-document请求,其处理比较复杂,之前一直搞不清请求的处理逻辑,今天就从源码入手,仔细剖析一下其执行逻辑。
时序分析
- 简单而言,Bulk的时序如下图所示,Http节点只将包转为TCP,ingest节点进行些预设的前置处理,然后按shard拆分,再把按shard拆开的bulk再发到真实的data节点上,最后由data节点进行主副本同步写入。
具体流程
RestControllor
接收请求,dispatch到对应的handler上
BaseRestHandler
调用RestBulkAction
进行前置处理,请求转为BulkRequest
NodeClient
根据ActionModule
注册的映射关系,找到TransportBulkAction
作为tcp的处理逻辑TransportBulkAction
检查自己是不是ingest node
,如果不是就转发
Ingest Node
接收到请求,执行pipeline
TransportBulkAction
调用BulkOperation
将BulkRequest
拆为BulkShardRequest
,转发到DataNode
Primary Data Node
收到请求,转为ReplicationOperation
操作,调用TransportShardBulkAction
进行主副本的依次执行
TransportShardBulkAction
的具体执行过程为shardOperationOnPrimary
和shardOperationOnReplica
,执行时直接调用了Engine进行执行。具体代码就不贴了,比较长
线程池分析
- 在日常中,我们经常遇到由于线程池占满的
es_rejected_execution_exception
- 通过源码可以看到,bulk的线程池为
ThreadPool.Names.BULK
,全局查找后发现只有TransportShardBulkAction
和PipelineExecutionService
有用。 - 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剖析相关推荐
- ES bulk源码分析——ES 5.0
对bulk request的处理流程: 1.遍历所有的request,对其做一些加工,主要包括:获取routing(如果mapping里有的话).指定的timestamp(如果没有带timestamp ...
- es bulk java_ES 操作之批量写-BulkProcessor 原理浅析
最近对线上业务进行重构,涉及到ES同步这一块,在重构过程中,为了ES 写入 性能考虑,大量的采取了 bulk的方式,来保证整体的一个同步速率,针对BulkProcessor 来深入一下,了解下 是如何 ...
- es bulk java_es v6.8.3 bulk 异常
项目启动正常,使用kibana连接es正常,数据入库会时会报如下异常 org.elasticsearch.client.transport.NoNodeAvailableException: None ...
- es bulk java_Java Elasticsearch Bulk API 批量操作
ES的Bulk API主要用于在单个请求中,批量执行创建.更新.删除文档操作,避免循环发送大量的ES请求. 创建BulkRequest对象 BulkRequest request = new Bulk ...
- es bulk update 时间格式
es创建的json对象的时候, 会把 Date转换为 long 时间戳格式 但是 bulk更新的时候, 如果直接使用 Date格式 会报错, 需要转换为 long时间戳格式 ,才可以进行更新
- 一起来学ES —— 浅谈Nested结构
Nested是什么? 直观的说,Nested实际上就是Object的数组.如下,这个user就是个nested结构 { "user" : [ {"first" ...
- es管理kabina_小白学ES 05 - 通过Kibana管理集群服务
目录 前述步骤: ① 启动Kibana; ② 通过浏览器访问Kibana; ③ 进入Dev Tools(开发者工具)界面. 1 检查集群的健康状况 ES提供了一套_cat API, 可以查看ES中的各 ...
- bulk插入 es_ElasticSearch的Bulk操作 ES bulk详解
elasticsearch bulkApi是什么?和普通的CURD区别在哪里? 1.可以批量对多个索引进行增加或者删除等操作,减少网络请求次数,可以显著的提高索引的速度. 2.CURD只能对单条数据进 ...
- 龙叔学ES:elasticsearch扫盲篇
看完本文 你基本就对elasticsearch有了基本较为全面的了解 (注意哦 本文讲解的都是 ES 7版本之后 的内容) 目录 1.什么是elasticsearch? 2.ES概念.架构.原理 2 ...
最新文章
- Open3d学习计划—高级篇 3(点云全局配准)
- 九度 1550 分糖果
- MyBatis Plus——分页插件【PaginationInnerInterceptor】
- 黄金寨景区、缥缈间温泉2019北京推介会成功举办
- py第五天,列表的练习,每日菜谱
- 项目杂-备注-说明-其他
- 如何使用Omni Remover Mac版释放Mac上的空间
- Python画一个国旗
- 拓端tecdat|R语言动态可视化:制作历史全球平均温度的累积动态折线图动画gif视频图
- 用DIB位图显示图像
- Front: 电子邮件通讯创业新模式
- CentOS配置Nginx官方的Yum源 及yum安装php
- 王超(清华大学博士)Linux期末考核
- FME将ArcGIS符号化转为CAD填充
- python怎么判断质数和合数_什么是质数和合数以及判断方法介绍
- 微积分(一)——二重积分与三重积分笔记
- 全球与中国量身定制生产线市场深度研究分析报告
- 怎么检测计算机硬件好坏,鲁大师如何检测硬件好坏?硬件好坏检测方法介绍
- Fluid Mask 抠图 换背景教程
- 小程序电商商城怎么搭建?