Elasticsearch源码分析
本专栏的文章是关于ES5.6.4版本做的源码分析
道友,且慢
不愤不启,不悱不发,学习就应该是问题驱动的。
微信: bclz_007
展开
-
ES 5.6.4 源码解析---Netty框架处理http请求
简介阅读ES源码首先需要了解http请求如何转发到具体的实现类中,否则很可能本各种莫名其妙的跳转搞晕。ES 利用Netty框架处理http请求。在ES2.x中用的netty3版本,在5.X中默认使用netty4版本,当然可通过如下启动方式切换到netty3版本:./bin/elasticsearch -Ehttp.type=netty3在看源码之前先介绍一下netty的基本概念。...原创 2018-09-04 19:14:19 · 1442 阅读 · 1 评论 -
ES5.6.4源码解析--批量索引bulk
引言ES的批量索引操作,可以把多条索引请求合成一次请求,每个请求可以指定不同的索引。当往ES中索引大量数据的时候,使用批量索引能够大大增加索引的数据。接下来让我们通过阅读批量索引的源码来揭开其神秘的面纱。索引请求的预处理批量索引的入口位于TransportBulkAction#protected void doExecute(Task task, BulkRequest bulkR...原创 2018-08-28 20:00:15 · 1958 阅读 · 0 评论 -
ES5.x 中long类型不支持time zone
问题为了在ES上根据时间进行统计,我在ES5.6.4上做了date_histogram聚合,查询语句如下所示{ "aggregations": { "dateVspAggs": { "date_histogram": { "field": "timestamp", "interval": "day", "time_zone...原创 2019-05-22 11:57:09 · 3438 阅读 · 1 评论 -
ES 5.6.4源码解析---translog
ES 中translog是存储于磁盘上的文件,每个ES分片都会一个translog,所以translog的存储路径就位于分片数据目录下。如下图所示:1:索引名称2:分片名称3存放translog文件的目录Translog目录下有2种格式的文件,tlog后缀的文件和ckp后缀的文件。translog中存储了ES的操作记录,具体的说是ES还没落盘的数据的操作记录。因此不难看出trans...原创 2019-01-30 18:55:23 · 2279 阅读 · 0 评论 -
ES5.6.4源码分析----多实例的原理
起源本文的起因源于现场问题的排查。首先要说明的是ES的数据默认存储在nodes目录下,假设ES配置文件中指定的数据目录为/tmp/elasticsearch,那么ES会把数据存在如下目录:/tmp/elasticsearch/nodes正常情况下nodes目录下只有一个目录0,即/tmp/elasticsearch/nodes/0ES的所有数据就存在0目录下。然而ES的现场环境经...原创 2018-10-09 20:39:58 · 539 阅读 · 0 评论 -
ES5.6.4源码分析----gateway流程
背景本文转载自 https://www.easyice.cn/archives/226es 存储的数据有以下几种形式: - state - index - translogindex 为 lucene 生成的索引文件translog 为es 产生的事务日志state 是元数据信息,有以下几种:nodes/0/_state/global-82.st 集群层面元信息...转载 2018-09-29 15:45:02 · 377 阅读 · 0 评论 -
ES5.6.4源码分析----索引的创建过程
入口TransportCreateIndexAction#masterOperation解析请求中的索引名称final String indexName = indexNameExpressionResolver.resolveDateMathExpression(request.index());由于创建索引请求中的索引名称可能是日期数学表达式表示的,所以要将其解析成具体的名称。规...原创 2018-09-27 19:14:00 · 679 阅读 · 0 评论 -
ES5.6.4源码解析----分片在磁盘间的分配策略
引文ES的索引是由若干个分片组成,在索引创建的时候需要指定分片个数、副本个数。如果没有指定,分片个数默认为5个,副本个数默认1个。一个索引的各个分片会根据路由算法均匀的分布于各个节点中。本文提出的问题是,如果一个分片指定分片到某个节点,而该节点的数据路径分布于多个磁盘上,即elasticsearch.yml中的配置如下:path.data:/disk1/data/elasticsearch,/...原创 2018-09-26 15:19:55 · 1030 阅读 · 0 评论 -
ES5.6.4源码分析----查询流程
分片路由参考:https://www.jianshu.com/p/cfdfefbe30a2原创 2018-09-20 18:39:25 · 923 阅读 · 0 评论 -
ES的transportClient初始化过程解析
TransportClient的初始化流程创建client的代码在初始化TransportClient的时候,我们将嗅探模式开启,即client.transport.sniff设置为true.Settings settings = Settings.settingsBuilder() .put("client.transport.sniff", true).p...原创 2019-03-12 11:51:17 · 3733 阅读 · 0 评论 -
ES5.6.4源码解析--聚合查询流程
aggregationPhase.preProcess(searchContext);在执行聚合查询之前做一些准备:构建aggregationContext用于存放聚合过程中产生的数据;构建aggregators,他是聚合过程中统计数据的具体实现,由aggregator构成了采集器collectors。...原创 2019-09-26 16:58:48 · 1413 阅读 · 0 评论