10月27日ElasticStack发布了全新的5.0.0版本,ElasticStack是一个解决方案统称包括,Elasticsearch、Kibana、Beats、Logstash几个主要的程序。为了和其余产品版本号保持一致,elasticsearch的版本也从2.4版本直接跳到5.0版本。java
升级指南:node
5.X版本的ES能够读取2.X版本生成的索引,因此2.X版本要迁移到5.X, 须要从新启动完整的集群。系统不支持1.X版本到5.X版本的升级。对1.X版本的升级须要先对1.X版本的索引进行重建。算法
系统提供了一个迁移助手插件,能够帮助系统从2.3以上的版本迁移到5.X。
elasticsearch5.0.0主要新特性缓存
索引性能安全
因为采用了不少新的技术,在5.0.0中的索引性能有了明显的提升。这些新技术包括采用了新的数字类型结构,在并发更新到同一文档中采用了新的技术减小了锁的冲突,在同步事务日志时减小锁定的条件。采用了异步同步日志机制,增长减小了磁盘寻址的时间。当依靠Elasticsearch自动生成文档ID时采用了采用了基于时间的用户实例增长了比较大的效率。支持实时文档内部更改的获取,能够增长更多的可用内存用于索引缓冲区,同时在垃圾收集中花费更少的时间。一般状况,能够提升25%-80%的效率。数据结构
数据转换(Ingest Node)并发
在5.0.0中,新增了一个特性数据转换(Ingest Nodes)。他能够不依赖于Logstash实现经常使用的过滤能力,好比grok, split, convert, date等。它能够用来执行常见的数据转换和处理。可使用转换节点在实际索引以前对文档进行预处理。在任何转换节点中,处理索引或者块处理以前进行预处理转换。能够在任何节点开启转换功能,或者创建单独的转换节点。在默认状况下,在任何节点都有开启了转换能力,若是要关闭转换能力,须要在配置文件中添加:app
node.ingest: falseless
在索引文档以前进行预处理,它定义了一个指定一系列处理器的管道。每一个处理器以某种方式转换文档。例如,你可能有一个管道,包括一个处理器,从文档中删除字段,而后进入另外一个处理器,对文档中的字段进行重命名。
使用一个管道,你只需在一个索引或批量请求后加入管道参数。例如:异步
PUT my-index/my-type/my-id?pipeline=my_pipeline_id { "foo": "bar" }
在使用前,须要先定义管道,例如定义上面的管道:
PUT _ingest/pipeline/my-pipeline-id { "description" : "describe pipeline", "processors" : [ { "set" : { "field": "foo", "value": "bar" } } ] }
本文由赛克 蓝德(secisland)原创,转载请标明做者和出处。
新增脚本Painless scripting
因为外部的脚本引擎太过于强大,什么都能作,用很差或者设置不当就会引发安全风险,基于安全和性能方面的考虑,在5.0中引入了一个新的脚本引擎Painless,顾名思义,简单安全,无痛使用,这个脚本引擎默认是开启的。和Groove的沙盒机制不同,Painless使用白名单来限制函数与字段的访问,针对es的场景来进行优化,只作es数据的操做,更加轻量级,速度要快好几倍,而且支持Java静态类型,语法保持Groove相似,还支持Java的lambda表达式。
新的数据结构
在5.0版本中集成了Lucene 6,Lucene 6对数字类型和地理类型增长了一个新的点数据结构,叫作K-Ds树,它改变了数字类型的索引和搜索。它增长了36%的查询速度,增长了71%索引速度,减小了66%的硬盘空间占用,减小了85%的内存使用。新增长的IP字段支持IP4和IP6。根据Lucene 6新的LatLonPoint结构修改了地理点类型,使地理点查询的性能增长了一倍。同时还增长了一个半精度(half_float)浮点类型(16位)和大浮点类型(scaled_float),他们使用了数据压缩技术来减小磁盘占用。这些新类型能够意味着在许多状况下,特别是在数字型数据中将显着减小的磁盘空间。
引入新的字段类型Text/Keyword 来替换 String
之前的string类型被分红Text和Keyword两种类型,keyword类型的数据只能彻底匹配,适合那些不须要分词的数据,对过滤、聚合很是友好,text固然就是全文检索须要分词的字段类型了。将类型分开的好处就是使用起来更加简单清晰,之前须要设置analyzer和index,而且有不少都是自定义的分词器,从名称根本看不出来到底分词没有,用起来很麻烦。另外string类型暂时还在的,6.0会移除。
搜索和聚合
Elasticsearch提供了Aggregation缓存,若是你的数据没有变化,ES可以直接返回上次的缓存结果,
可是有一个场景比较特殊,就是 date分组,如:from:now-30d to:now,now是一个变量,每时每刻都在变,因此query条件一直在变,这样缓存也就是没有利用起来。在5.0中作了改进,
首先,`now`关键字最终会被重写成具体的值;
其次,每一个分片会根据本身的数据的范围来重写查询为 `match_all`或者是`match_none`查询,因此如今的查询可以被有效的缓存,而且只有个别数据有变化的分片才须要从新计算,大大提高查询速度。
搜索结果分页增长了search_after特性,它有效地跳过之前返回的结果只返回下一页的数据。移动搜索如今能够被并行执行。默认使用BM25评分算法,替换以前的TF/IDF评分算法。
增长了Percolator type映射类型。彻底重写了completion suggester
用户友好性的改进
索引的改进
Elasticsearch的配置实在太多,在新的5.0版本中,对配置验证更加严格,保证原子性,若是其中一项失败,那个整个更新请求都会失败,不会一半成功一半失败。
新增了一个Shrink接口
在5.0以前的版本中索引的分片数是固定的,设置好了以后不能修改,若是发现分片太多或者太少,若是要修改,只能重建索引。在5.0中增长了Shrink接口,它可将分片数进行收缩成它的因数,如以前你是15个分片,你能够收缩成5个或者3个又或者1个,那么咱们就能够想象成这样一种场景,在写入压力很是大的收集阶段,设置足够多的索引,充分利用shard的并行写能力,索引写完以后收缩成更少的shard,提升查询性能。
新增了一个Rollover接口
对于日志类的数据通常咱们按天来对索引进行分割(数据量更大还能进一步拆分),咱们之前是在程序里设置一个自动生成索引的模板,例如logstash中的logstash-[YYYY-MM-DD]模板,如今5.0中提供了一个更加简单的方式:Rollover API,例如:
PUT /logs-000001{ "aliases": { "logs_write": {} } } # Add > 1000 documents to logs-000001 POST /logs_write/_rollover
{ "conditions": { "max_age": "7d", "max_docs": 1000 } }
从上面能够看到,首先建立一个logs-0001的索引,它有一个别名是logs_write,而后咱们给这个logs_write建立了一个rollover规则,即这个索引文档不超过1000个或者最多保存7天的数据,超过会自动切换别名到logs-0002,你也能够设置索引的setting、mapping等参数,剩下的es会自动帮你处理。
新增:Depreated logging
你们在用ES的时候,其实有些接口可能以及打上了Depreated标签,即废弃了,在未来的某个版本中就会移除,你当前能用是由于通常废弃的接口都不会当即移除,给足够的时间迁移,可是也是须要知道哪些不能用了,要改应用代码了,因此如今有了Depreated日志,当打开这个日志以后,你调用的接口若是已是废弃的接口,就会记录下日志,那么接下来的事情你就知道你应该怎么作了。
新增: Cluster allocation explain接口
『谁能给我一个shard不能分配的理由』,如今有了,你们若是以前遇到过度片不能正常分配的问题,可是不知道是什么缘由,只能尝试手动路由或者重启节点,可是不必定能解决,其实里面有不少缘由,如今提供的这个explain接口就是告诉你目前为何不能正常分配的缘由,方便你去解决。
弹性
5.0版本增长了不少变化,它使ES的更加的安全。分布式模型的每一部分都已分离,重构,简化,并使之更可靠。群集状态更新要等待集群中的全部节点的确认。当主分片复制失败的时候,主要如今等待master节点的响应。索引的据路径如今使用UUID,而不是索引名称,能够避免命名冲突。
在5.0中增长了启动检查来来确保配置的正确性。同时引入了开发模式和生产模式两种方式,对生产模式的检查会更加的严格。系统增长了新的内存控制器,在聚合请求等过程监控内存的使用,当聚合内存有可能过大的时候则中断查询请求,正常状况下,内存不足的状况基本上不会发生。
对多用户的状况下,系统增长了更多的权限控制来减小普通用户的误操做,例如:请求超时后禁用的文本字段字段的数据加载,限制分片请求的数量,限制映射的字段数量等等。
java RestClient客户端
5.0里面提供了第一个Java原生的REST客户端SDK,相比以前的TransportClient,版本依赖简单,集群升级不影响,支持跨Java版本的调用等,新的基于HTTP协议的客户端对Elasticsearch的依赖解耦,没有jar包冲突,提供了集群节点自动发现、日志处理、节点请求失败自动进行请求轮询,充分发挥Elasticsearch的高可用能力,而且性能不相上下。
迁移助手
Elasticsearch迁移助手是一个网站的插件,它能够帮助你从Elasticsearch 2.3.x/2.4.x版本到5.x版本的迁移,它配备了三个工具:
集群的检查:在您的群集、节点和索引上运行一系列检查,并提醒您在升级以前须要纠正的任何已知问题。
重建索引助手:在V2.0.0版本以前的索引须要从新才能够在5.0中识别。重建索引助手经过一个按钮升级索引。
过时接口日志:当使用过时接口时,系统会把过时的日志打出来,助手能够在集群中打开或者关闭过时日志打印功能。
赛克蓝德(secisland)后续会逐步对Elasticsearch的最新版本的各项功能进行分析,近请期待。