默认情况下启用自适应副本选择
在Elasticsearch 6.x和更低版本中,对同一分片的一系列搜索请求将以循环方式转发到主要副本和每个副本。 如果一个节点开始进行长时间的垃圾收集,这可能会带来问题-无论如何仍然可以将搜索请求转发到慢速节点,这会对搜索延迟产生影响。
在6.1中,我们添加了实验性 adaptive replica selection 功能。 每个节点跟踪并比较对其他节点的搜索请求所花费的时间,并使用此信息来调整向特定节点上的分片发送请求的频率。 在基准测试中,这可以整体提高搜索吞吐量,并减少99%的延迟。
此选项在6.x整个版本中默认都处于禁用状态,从Elasticsearch 7.0.0开始默认将其打开。
如果分片为“搜索空闲”,则跳过分片会刷新
默认情况下,Elasticsearch 6.x和先前 refreshed 的索引在后台每秒自动运行一次。 这提供了“近实时”搜索功能,默认情况下,搜索结果在添加后一秒钟内可用于搜索请求。 但是,如果不需要刷新(例如,Elasticsearch不为任何活动搜索提供服务),则此行为会对索引编制性能产生重大影响。
Elasticsearch 7.0在默认情况下,碎片在 thirty seconds内没有任何搜索后,便会转换为搜索空闲状态。 一旦分片处于搜索空闲状态,将跳过所有计划的刷新,直到搜索通过为止,这将触发下一个计划的刷新。 这将大大提高许多用户的索引吞吐量。 仅当未设置显式刷新间隔refresh interval set时才应用新行为,因此请为希望使用旧行为的任何索引显式设置刷新间隔。
默认一个分片
在Elasticsearch 6.x和更低版本中,每个索引默认默认为五个分片。 如果您有一个针对十个不同应用程序的每日索引,并且每个索引的默认值为五个分片,您每天要创建50个分片,不久便有了成千上万个分片,即使您每天仅索引几GB的数据。索引生命周期管理是帮助解决此问题的第一步:提供本机rollover功能以按大小而不是按天(仅)创建索引,并内置shrink功能以缩小每个索引的分片数量。
Lucene 8
Elasticsearch 7.0捆绑了Lucene 8,这是Lucene的最新版本。 Lucene版本8为Elasticsearch其余部分的许多功能改进奠定了基础,包括改进了对top-k查询的搜索性能,以及在保持速度的同时为搜索组合相关信号的更好方法。
在跨集群搜索中引入最小化往返行程的功能
在Elasticsearch 5.3中,发布cross-cluster search功能,供用户跨多个集群查询。 此后,对跨集群搜索框架进行了改进,添加了一些功能,最终可以使用它来弃用和替换部落节点,作为联合查询的一种方式。 在Elasticsearch 7.0中,为跨集群搜索添加了一种新的执行模式:一种在不需要时往返次数较少的模式。 当跨集群搜索查询跨越高延迟(例如,跨WAN)时,(ccs_minimize_roundtrips)模式可以加快搜索速度。
新的集群协调实施
为了满足Elasticsearch易于扩展并能够应对灾难性故障要求,默认实现Zen Discovery可插拔的集群协调系统。但Zen的minimum_master_nodes设置经常配置错误,这会使群集更容易出现裂脑和丢失数据的风险。在大型且动态调整大小的群集上维持此设置也很困难。
在Elasticsearch 7.0中,完全重新考虑并重建了集群协调层。新的实现提供了安全的亚秒级主设备选举时间,Zen可能花了几秒钟的时间来选举新的主设备,这对于关键任务部署来说是宝贵的时间。删除了minimum_master_nodes设置后,扩容和收缩的群集将变得更加安全和轻松,并且为配置错误的系统留出了更少的空间。
对小堆的更好支持(实时内存断路器)
Elasticsearch 7.0添加了一个全新的断路器circuit breaker,可跟踪JVM使用的总内存,并且如果引起保留加上实际堆使用率超过95%,将拒绝请求。 我们还将更改默认的最大存储桶到10,000,以作为聚合search.max_buckets一部分返回,默认情况下在6.x和更低版本中无限制。
跨集群复制已可用于生产
在Elasticsearch 6.5中引入了跨集群复制作为beta功能。跨集群复制现已普遍可用,并已在Elasticsearch 6.7和7.0中投入生产!跨集群复制具有多种用例,包括跨数据中心和跨区域复制,复制数据以更接近应用程序服务器和用户,以及维护从大量较小集群中复制的集中式报告集群。
除了使GA功能日趋完善外,CCR在6.7和7.0方面还有许多重要的技术进步。以前版本的跨集群复制要求复制只能在新索引上开始:无法复制现有索引。现在,跨集群复制可以开始复制在6.7和7.0中启用了软删除的现有索引,并且新索引默认为启用了软删除。还引入了新技术,以防止follower指数严重落后于leader指数。在Kibana中添加了一个管理UI,用于配置远程集群,要复制的索引以及用于自动复制的索引命名模式(例如,用于复制metricbeat- *索引)。还添加了一个监视UI,以深入了解跨集群复制进度并警告错误。查看跨集群复制入门指南,或访问参考文档以了解更多信息。
索引生命周期管理已投入生产
索引生命周期管理(ILM)在Elasticsearch 6.6中作为beta版本发布。现已将ILM正式从Beta版迁移到GA版,准备投入生产! ILM使得在Elasticsearch中管理数据的生命周期变得容易,包括数据在hot, warm, cold, and deletion phases阶段之间迁移。可以通过Elasticsearch中的API或Kibana中的管理UI来创建有关数据如何在这些阶段中移动的特定规则。
在Elasticsearch 6.7和7.0中,ILM现在可以管理冻结索引。冻结索引对于Elasticsearch中的长期数据存储很有价值,并且相对于节点管理的数据量而言,需要的存储量(堆)更小。在6.7和7.0中,现在可以将frozen indices作为ILM中冷阶段的一部分进行冻结。此外,ILM现在可以直接与跨集群复制(CCR)一起使用,CCR在Elasticsearch 6.7和7.0版本中也都采用了GA。在documentation中可以找到每个ILM阶段中可用的操作。 ILM是免费使用的,并且是Elasticsearch的默认发行版的一部分。
SQL已准备就绪
Elasticsearch的SQL接口现在是GA。 SQL界面Introduced in 6.3中作为Alpha发行版引入,它还允许使用SQL的BI工具轻松访问Elasticsearch中的数据。 除了在Elasticsearch中将SQL访问权限批准为GA功能外,我们还将JDBC和ODBC驱动程序指定为GA。 有四种访问Elasticsearch SQL的方法:Elasticsearch REST endpoints, Elasticsearch SQL command line interface, JDBC driver, ODBC driver
高级REST客户端功能齐全
创建下一代Java客户端以访问Elasticsearch集群。从研究最常用的功能(例如搜索和聚合)开始,一直在通过管理和监视API进行工作。许多使用Java的人已经在使用这个新客户端,但是对于仍在使用TransportClient的人来说,现在是升级到High Level REST Client或HLRC的好时机。
从7.0.0版本开始,HLRC现在已选中所有API复选框以将其称为“完成”,因此仍在使用TransportClient的您应该能够迁移。当然,我们将继续开发REST API,并将它们添加到此客户端中。有关所有可用API的列表,请查看HLRC documentation首先,请查看getting started with the HLRC,如果需要从TransportClient迁移的帮助,请参阅migration guide
支持纳秒级时间戳
直到7.0,Elasticsearch只能存储毫秒级的时间戳。 如果要处理发生率较高的事件,例如,如果要在Elasticsearch中存储和分析跟踪或网络数据包数据,则可能需要更高的精度。 从历史上看,曾使用 Joda time library 来处理日期和时间,而Joda缺乏对如此高精度时间戳的支持。
在JDK 8中,引入了正式的Java时间API,该API也可以处理纳秒级的精确时间戳,并且在过去的一年中,我们一直在努力将Joda时间使用情况迁移到本机Java时间,同时试图保持向后兼容性。 从7.0.0版本开始,您现在可以通过专用的date_nanos field mapper使用这些纳秒级的时间戳。 请注意,此字段的聚合仍处于毫秒级分辨率,以避免发生存储桶爆炸。
更快检索热门击中
在Elasticsearch 7.0中的搜索性能有了显着提高。例如,如果您的用户通常只查看您网站上结果的第一页,而不在乎匹配的文档有多少,那么您可以向他们显示“超过10,000次匹配”,然后为他们提供分页结果。用户在查询中输入频繁出现的词(例如“ the”和“ a”)是很常见的,这在历史上一直迫使Elasticsearch给很多文档打分,即使这些频繁的词可能不会给得分增加太多。
在这种情况下,Elasticsearch现在可以跳过为在早期被识别为不会在结果集顶部排名的记录的记录计算分数的方法。这样可以大大提高查询速度。得分最高的实际结果的实际数量是configurable,但默认值为10,000。结果集小于此阈值的查询的行为不会改变-即结果计数是准确的,但是对于匹配少量文档的查询,性能没有改善。由于改进是基于跳过低排名的记录,因此不适用于汇总。可以在博客文章Magic WAND: Faster Retrieval of Top Hits in Elasticsearch中阅读有关此强大算法开发的更多信息。
支持TLS 1.3
Elasticsearch长期以来一直支持加密通信,JDK 11现在支持TLSv1.3,从7.0开始在Elasticsearch中为运行JDK 11的用户提供TLSv1.3的支持。为了帮助新用户避免无意中以低安全性运行,还删除了TLSv1 .0(默认值)。 对于运行旧版Java的用户,有TLSv1.2和TLSv1.1的默认选项。 如果您需要入门方面的帮助,请参阅TLS setup instructions
在Elasticsearch发行版中捆绑JDK
在7.0中捆绑了一个OpenJDK发行版,以帮助用户更快地开始使用Elasticsearch。 某些用户更喜欢JDK发行版,因此也支持自带JDK,仍然可以通过在启动Elasticsearch之前设置setting JAVA_HOME 来实现。
等级特征
Elasticsearch 7.0有几种新的字段类型,可以最大程度地利用数据。 可以帮助核心搜索用例的两个是 rank_feature
and rank_features
这些可用于增强基于数字或类别值的文档,同时仍保持新的快速热门匹配查询功能的性能。 有关这些字段以及如何使用它们的更多信息,请阅读blog post
JSON记录
除了纯文本日志外,现在还在Elasticsearch中启用了JSON日志记录。 从7.0开始,您将在日志目录中找到扩展名为.json的新文件。 现在可以使用jq
过滤工具以更加结构化的方式漂亮地打印和处理日志。 您还可以期望在每个日志行中找到其他信息,例如node.id,cluster.uuid,键入(以及更多)。 每个JSON日志行的type字段可让您在docker上运行时区分日志流。
脚本分数查询(又名功能分数2.0)
在7.0中,将介绍 next generation of our function score capability这个新的script_score查询提供了一种新的,更简单且更灵活的方式来为每条记录生成排名分数。 script_score查询由一组函数构成,其中包括算术和距离函数,用户可以将其混合和匹配以构造任意函数得分计算。 模块化结构更易于使用,并将向其他用户开放此重要功能。