Su的技术博客

  • 首页
  • Java
  • MySQL
  • DDD
  • 事故复盘
  • 架构方案
  • Other
  • 工具
  • 打赏
  • 关于
  1. 首页
  2. ElasticSearch
  3. 正文
                           

【原创】ElasticSearch之各大版本演进,发布8.0.0 Alpha 2版本

2021-10-10 39点热度 0人点赞 0条评论





ES各大版本演进时间线:


视频版的可以移步B站同号——点击左下角 “阅读原文” 直达。


初始版本 0.7.0

2010年5月14日
  • Zen Discovery 自动发现模块

  • Groovy Client支持

  • 简单的插件管理机制

  • 更好支持ICU分词器

  • 更多的管理API

icu_分词器 和 标准分词器 使用同样的 Unicode 文本分段算法, 只是为了更好的支持亚洲语,添加了泰语、老挝语、中文、日文、和韩文基于词典的词汇识别方法,并且可以使用自定义规则将缅甸语和柬埔寨语文本拆分成音节。

1.0.0

2014年2月14日
  • Snapshot/Restore API 备份恢复API

  • 支持聚合分析Aggregations

  • CAT API 支持

  • 支持联合查询

  • 断路器支持

断熔器通过内部检查(字段的类型、基数、大小等等)来估算一个查询需要的内存。如果估算查询的大小超出限制,就会 触发 断路器,查询会被中止并返回异常。可防止OOM异常等。

  • Doc Values 引入

Doc Values本质上是一个序列化了的列式存储结构,非常适合排序、聚合以及字段相关的脚本操作。而且这种存储方式便于压缩,尤其是数字类型。压缩后能够大大减少磁盘空间,提升访问速度。默认每个字段 都是开启的,Doc Values是在索引时创建,当字段索引时会把字段的值加入到倒排索引并且会存储该字段的Doc Values。场景:对字段进行排序、聚合、过滤(地理位置过滤)、脚本计算等。作用:提升效率,防止JVM堆内存溢出异常。

2.0.0

2015年10月28日
  • 增加了 pipleline Aggregations

  • query/filter 查询合并,都合并到query中,根据不同的上下文执行不同的查询

  • 存储压缩可配置

  • Rivers 模块被移除

river代表es的一个数据源,也是其它存储方式(如:数据库)同步数据到es的一个方法。它是以插件方式存在的一个es服务,通过读取river中的数据并把它索引到es中,官方的river有couchDB的,RabbitMQ的,Twitter的,Wikipedia的。由于Rivers会造成集群的不稳定。Rivers处理外部系统,而这些外部系统需要外部库来处理。这些工具使用起来很好,但是会带来一定的开销。它的一部分是建立在开销上的,比如额外的内存使用量、更多的套接字、文件描述符等等。遗憾的是,还有一些是bug。

  • Multicast 组播发现成为组件

成为一个插件,生产环境必须配置单播地址。组播发现有很多缺点,当elasticsearch集群规模较大的时候,组播的发现机制会产生太多不必要的流量开销,不属于当前集群的es节点会错误的加入集群中,当网络环境发生变动的时候,组播的发现机制也会变得不可靠,从elasticsearch 5.0开始,elasticsearch已经移除了对组播的支持。但是elasticsearch可以发现位于同一台机器上的实例,并和相同的cluster.name名字组成集群

5.0.0

2016年10月26日
  • Lucene 6.x 的支持,磁盘空间少一半;索引时间少一半;查询性能提升25%;支持IPV6。

  • Internal engine级别移除了用于避免同一文档并发更新的竞争锁,带来15%-20%的性能提升

  • Shrink API

它可将分片数进行收缩成它的因数,如之前你是15个分片,你可以收缩成5个或者3个又或者1个,那么我们就可以想象成这样一种场景,在写入压力非常大的收集阶段,设置足够多的索引,充分利用shard的并行写能力,索引写完之后收缩成更少的shard,提高查询性能

  • 新增Ingest Node

之前如果需要对数据进行加工,都是在索引之前进行处理,比如logstash可以对日志进行结构化和转换,现在直接在es就可以处理了。数据前置处理转换的节点,支持 pipeline管道 设置,可以使用 ingest 对数据进行过滤、转换等操作,类似于 logstash 中 filter 的作用,功能相当强大。

  • 提供 Painless 脚本,代替Groovy脚本

  • 移除 site plugins

就是说 head 、 bigdesk 都不能直接装 es 里面了,不过可以部署独立站点(反正都是静态文件)或开发 kibana 插件

  • 新增 Sliced Scroll类型

现在Scroll接口可以并发来进行数据遍历了。每个Scroll请求,可以分成多个Slice请求,可以理解为切片,各Slice独立并行,利用Scroll重建或者遍历要快很多倍。

  • 新增Profile API

性能执行情况

  • 新增Rollover API

索引被认为太大或太旧时,滚动索引API 会将别名滚动到新的索引

  • 新增Reindex API

将一个索引的数据复制到另一个已存在的索引,但是并不会复制原索引的mapping(映射)、shard(分片)、replicas(副本)等配置信息

  • 提供了第一个Java原生的REST客户端SDK

基于HTTP协议的客户端对Elasticsearch的依赖解耦,没有jar包冲突,提供了集群节点自动发现、日志处理、节点请求失败自动进行请求轮询,充分发挥Elasticsearch的高可用能力

  • 引入新的字段类型 Text/Keyword 来替换 String

  • 限制索引请求大小,避免大量并发请求压垮 ES

  • 限制单个请求的 shards 数量,默认 1000 个

6.0.0

2017年8月31日
  • 稀疏性 Doc Values 的支持

稀疏性指一个索引里面,文档的结构其实是多样性的,但是郁闷的是只要一个文档有这个字段,其他所有的文档尽管没有这个字段,可也都要承担这个字段的开销,所以会存在磁盘空间的浪费,而这块的改进就是这个问题。

  • Index sorting,即索引阶段的排序。

即在索引阶段的排序,即我们查询的时候有时候会根据某个字段的值进行排序,比如时间、编号等等,如果在索引的时候提取排好序,那么搜索或聚合的时候就会非常快,相应的直接走预先排序好的索引就行了。当然索引的时候会要增加额外开销,适合不怎么变化的索引的场景。

  • 顺序号的支持

每个 es 的操作都有一个顺序编号(类似增量设计),这个属于 es 内部的一个功能,可以提供:快速的分片副本恢复或同步;跨数据中心的节点恢复;甚至提供一个 Changes API 等等;

  • 无缝滚动升级

使之能够从 5 的最后一个版本滚动升级到 6 的最后一个版本,不需要集群的完整重启。无缝滚动升级,也就是不用停服务,在线升级

  • 逐步移除Type

在 6.0 里面,开始不支持一个 index 里面存在多个 type

  • Index-template inheritance

索引版本的继承,目前索引模板是所有匹配的都会合并,这样会造成索引模板有一些冲突问题, 6.0 将会只匹配一个,索引创建时也会进行验证

  • Load aware shard routing

基于负载的请求路由,目前的搜索请求是全节点轮询,那么性能最慢的节点往往会造成整体的延迟增加,新的实现方式将基于队列的耗费时间自动调节队列长度,负载高的节点的队列长度将减少,让其他节点分摊更多的压力,搜索和索引都将基于这种机制。

  • 已经关闭的索引将也支持 replica 的自动处理,确保数据可靠。

7.0.0

2019年4月10日
  • 集群连接变化:TransportClient被废弃 以至于,es7的java代码,只能使用restclient。然后,个人综合了一下,对于java编程,建议采用 High-level-rest-client 的方式操作ES集群

  • ES程序包默认打包jdk:以至于7.x版本的程序包大小突然变300MB+ 对比6.x发现,包大了200MB+, 正是JDK的大小

  • 重大改进-正式废除单个索引下多Type的支持 es6时,官方就提到了es7会删除type,并且es6时已经规定每一个index只能有一个type。在es7中使用默认的_doc作为type,官方说在8.x版本会彻底移除type。api请求方式也发送变化,如获得某索引的某ID的文档:GET index/_doc/id其中index和id为具体的值

  • 7.1开始,Security功能免费使用

  • ECK-ElasticSearch Operator on Kubernetes

  • 引入了真正的内存断路器

它可以更精准地检测出无法处理的请求,并防止它们使单个节点不稳定

  • Zen2 是 Elasticsearch 的全新集群协调层,提高了可靠性、性能和用户体验,变得更快、更安全,并更易于使用

  • 新功能

    • New Cluster coordination

    • Feature - Complete High Level REST Client

    • Script Score Query

  • 性能优化

    • Weak-AND算法提高查询性能

    • 默认的Primary Shared数从5改为1,避免Over Sharding

    • 更快的前 k 个查询

    • 间隔查询(Intervals queries) 某些搜索用例(例如,法律和专利搜索)引入了查找单词或短语彼此相距一定距离的记录的需要。Elasticsearch 7.0中的间隔查询引入了一种构建此类查询的全新方式,与之前的方法(跨度查询span queries)相比,使用和定义更加简单。与跨度查询相比,间隔查询对边缘情况的适应性更强。

8.0.0

alhpa1  August 11, 2021
alpha2 September 17, 2021
PS:以上各大版本罗列内容只是冰山一角,具体内容可以去官网了解。


参考资料

Elasticsearch各版本升级核心内容必看ttps://www.cnblogs.com/flyrock/p/11614396.html

Elasticsearch各版本及其下载地址 https://www.elastic.co/cn/downloads/past-releases#elasticsearch

Doc Values介绍 https://www.elastic.co/guide/cn/elasticsearch/guide/current/docvalues-intro.html

Deprecating Rivers https://www.elastic.co/cn/blog/deprecating-rivers

Elasticsearch之elasticsearch5.x 新特性 https://www.cnblogs.com/zlslch/p/6619089.html

Elasticsearch2.x Breaking changes https://blog.csdn.net/chennanymy/article/details/52562993

Elasticsearch5.0 BreakChange摘要 https://blog.csdn.net/weixin_30920513/article/details/99312266

Elasticsearch 6.x版本重大改变(Breaking changes in 6.x)https://blog.csdn.net/weixin_43249121/article/details/108584146

Elasticsearch 7.x版本重大改变(Breaking changes in 7.x)https://blog.csdn.net/weixin_43249121/article/details/108641958


回复公众号【资料】获得干货资料集锦:技术ppt、IT大会资料、架构、分布式资料等。
推荐好文
1、互联网Code Review最佳实践分享
2、dubbo面试题!会这些,说明你看懂了dubbo源码
3、Kafka面试题!掌握它才说明你真正懂Kafka
4、
Netty 5.0为啥被舍弃?原因竟然是...
5、
中台之上——业务架构系列【汇总】
6、必备瑞士军刀IDEA插件,你使用了哪些
7、线上热更新代码只需3步 Arthas实战
8、Eureka源码剖析之七:架构&面试题【总结】
9、互联网工程师应该用这种姿势打印日志

-关注搬运工来架构,与优秀的你一同进步-

如果喜欢这篇文章可以点在看哦↘

标签: 原创 搜索引擎 ElasticSearch Java
最后更新:2023-02-19

Cocodroid

专注Java后端,分享技术。

打赏 点赞

文章评论

razz evil exclaim smile redface biggrin eek confused idea lol mad twisted rolleyes wink cool arrow neutral cry mrgreen drooling persevering
取消回复

最新 热点 推荐
最新 热点 推荐
殷浩详解DDD 第四讲:领域层设计规范 既生@Resource,何生@Autowired? Go整洁架构实践 接口优化的常见方案实战总结 QQ音乐高可用架构体系 构建一个布隆过滤器 —— Building a Bloom filter
殷浩详解DDD 第四讲:领域层设计规范Redis为什么这么快?构建一个布隆过滤器 —— Building a Bloom filterQQ音乐高可用架构体系接口优化的常见方案实战总结Go整洁架构实践
tomcat应用服务启不来,没有报错日志?不可能! 殷浩详解DDD系列 第二讲 - 应用架构 【视频】NettyInAction作者:统治一切的框架Netty- One Framework to rule them all 记一次网络请求连接超时的事故 猪八戒网DevOps之Java组件安全检测 【视频】如何写高效内存Java代码——How to Write Memory-Efficient Java Code

@Autowired (1) @Resource (1) API网关 (1) ddd (6) DP (1) ElasticSearch (1) eureka (7) go (1) HTTP (1) IDEA (1) iOS (1) Java (8) JSR (1) QQ音乐 (1) repository (1) Spring (1) SQL优化 (1) 代理 (1) 依赖注入 (1) 同城双活 (1) 垃圾回收 (1) 定时任务 (1) 容灾 (1) 布隆过滤器 (1) 异地双活 (1) 接口优化 (1) 故障转移 (1) 数据库 (2) 整洁架构 (1) 文件网关 (1) 方案 (2) 服务续约 (1) 注册中心 (7) 流水账 (1) 流量 (1) 第五 (1) 线上案例 (1) 线上问题 (2) 缓存 (1) 缓存击穿 (1) 编译 (3) 网络 (3) 聊聊 (1) 订单 (1) 设计规范 (1) 详解 (1) 连接池 (1) 限流 (1) 领域驱动设计 (4) 高可用 (1)

COPYRIGHT © 2014-2023 verysu.com . ALL RIGHTS RESERVED.

Theme Kratos Made By Seaton Jiang

粤ICP备15033072号-2