Elasticsearch 8.11 中的合并更少,摄取更快

2023-10-16 21:01

本文主要是介绍Elasticsearch 8.11 中的合并更少,摄取更快,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

作者:ADRIEN GRAND

Elasticsearch 8.11 改进了管理索引缓存的方式,从而减少了段合并。

我们对 Elasticsearch 8.11 从索引缓存回收内存的方式进行了重大更改,这有助于减少合并开销,从而加快索引速度。 使用我们的日志跟踪,我们观察到,当使用 1GB 堆运行时,这些变化使摄取吞吐量提高了 8%。

它在 Elasticsearch 8.10 及更早版本中的工作原理

当索引数据时,Elasticsearch 开始在内存中构建新的段,并将索引操作写入 transaction log 中以实现持久性。 这些内存中的段最终会序列化到磁盘,或者当需要使更改可见时(Elasticsearch 中称为 “refresh” 的操作),或者当需要回收内存时。 本博客主要关注后者。

为了管理索引缓冲区的内存,Elasticsearch 会跟踪本地节点上所有分片使用了多少 RAM。 每当此内存量超过限制(默认为堆大小的 10%)时,它将识别使用最多内存的分片并刷新 (refresh) 它。

变化1:一次刷新一个段

当给定分片的更改缓冲在内存中时,不存在任何待处理的段。 为了能够并发索引,Lucene 维护了一个待处理段池。 当线程想要索引新文档时,它会从该池中选取一个挂起段,更新它,然后将挂起段移回池中。 如果池中没有空闲的挂起段,则会创建一个新段。 池中通常有许多待处理的段,它们按照峰值索引并发的顺序排列。

我们应用的第一个更改是更新此逻辑,不再一次刷新分片中的所有段,而是使用 Lucene 的 IndexWriter#flushNextBuffer() API 仅刷新最大的待处理段。 这很有帮助,因为挂起段的大小通常不统一,因为 Lucene 倾向于更新最大的挂起段,因此这种新方法有助于刷新更少的段,而这些段也应该明显更大。 由于合并的段较少,因此需要较少的合并来控制段的数量。

变化2:以循环方式刷新分片

跨多个分片管理共享索引缓冲区是一个难题。 现有逻辑假设,选择索引缓冲区使用最多内存的分片作为下一个从中回收内存的分片是很明智的。 毕竟,这是在我们再次达到索引缓冲区的最大内存量之前争取时间的最有效方法。 但另一方面,这也会对摄取最活跃的分片造成惩罚,因为它们会比摄取率适中的分片更频繁地刷新分段。 这里有许多移动部件,这使得很难对这些不同因素如何相互作用有一个良好的直觉,并找出选择下一个要刷新的分片的最佳策略。

因此,我们用各种方法进行了实验来选择下一个要刷新的分片,有趣的是,选择最大的分片是最差的,随机选择分片明显优于选择最大的分片。 实际上,唯一稍微优于随机挑选碎片的方法是以循环方式挑选分片。 这就是 Elasticsearch 现在选择下一个要刷新的分片的方式。

结论

这两项更改应该有助于减少合并开销并加快摄取速度,特别是对于小堆和在索引缓冲区中消耗大量 RAM 的字段类型(如 text 和 match_only_text 字段),或合并成本高昂的字段类型(如密集向量)。 享受加速!

这篇关于Elasticsearch 8.11 中的合并更少,摄取更快的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/220770

相关文章

Python中合并列表(list)的六种方法小结

《Python中合并列表(list)的六种方法小结》本文主要介绍了Python中合并列表(list)的六种方法小结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋... 目录一、直接用 + 合并列表二、用 extend() js方法三、用 zip() 函数交叉合并四、用

利用Python实现Excel文件智能合并工具

《利用Python实现Excel文件智能合并工具》有时候,我们需要将多个Excel文件按照特定顺序合并成一个文件,这样可以更方便地进行后续的数据处理和分析,下面我们看看如何使用Python实现Exce... 目录运行结果为什么需要这个工具技术实现工具的核心功能代码解析使用示例工具优化与扩展有时候,我们需要将

Python实现获取带合并单元格的表格数据

《Python实现获取带合并单元格的表格数据》由于在日常运维中经常出现一些合并单元格的表格,如果要获取数据比较麻烦,所以本文我们就来聊聊如何使用Python实现获取带合并单元格的表格数据吧... 由于在日常运维中经常出现一些合并单元格的表格,如果要获取数据比较麻烦,现将将封装成类,并通过调用list_exc

Elasticsearch 在 Java 中的使用教程

《Elasticsearch在Java中的使用教程》Elasticsearch是一个分布式搜索和分析引擎,基于ApacheLucene构建,能够实现实时数据的存储、搜索、和分析,它广泛应用于全文... 目录1. Elasticsearch 简介2. 环境准备2.1 安装 Elasticsearch2.2 J

Python实现合并与拆分多个PDF文档中的指定页

《Python实现合并与拆分多个PDF文档中的指定页》这篇文章主要为大家详细介绍了如何使用Python实现将多个PDF文档中的指定页合并生成新的PDF以及拆分PDF,感兴趣的小伙伴可以参考一下... 安装所需要的库pip install PyPDF2 -i https://pypi.tuna.tsingh

使用Apache POI在Java中实现Excel单元格的合并

《使用ApachePOI在Java中实现Excel单元格的合并》在日常工作中,Excel是一个不可或缺的工具,尤其是在处理大量数据时,本文将介绍如何使用ApachePOI库在Java中实现Excel... 目录工具类介绍工具类代码调用示例依赖配置总结在日常工作中,Excel 是一个不可或缺的工http://

使用Python创建一个能够筛选文件的PDF合并工具

《使用Python创建一个能够筛选文件的PDF合并工具》这篇文章主要为大家详细介绍了如何使用Python创建一个能够筛选文件的PDF合并工具,文中的示例代码讲解详细,感兴趣的小伙伴可以了解下... 目录背景主要功能全部代码代码解析1. 初始化 wx.Frame 窗口2. 创建工具栏3. 创建布局和界面控件4

Python自动化办公之合并多个Excel

《Python自动化办公之合并多个Excel》在日常的办公自动化工作中,尤其是处理大量数据时,合并多个Excel表格是一个常见且繁琐的任务,下面小编就来为大家介绍一下如何使用Python轻松实现合... 目录为什么选择 python 自动化目标使用 Python 合并多个 Excel 文件安装所需库示例代码

ElasticSearch+Kibana通过Docker部署到Linux服务器中操作方法

《ElasticSearch+Kibana通过Docker部署到Linux服务器中操作方法》本文介绍了Elasticsearch的基本概念,包括文档和字段、索引和映射,还详细描述了如何通过Docker... 目录1、ElasticSearch概念2、ElasticSearch、Kibana和IK分词器部署

Java实现Elasticsearch查询当前索引全部数据的完整代码

《Java实现Elasticsearch查询当前索引全部数据的完整代码》:本文主要介绍如何在Java中实现查询Elasticsearch索引中指定条件下的全部数据,通过设置滚动查询参数(scrol... 目录需求背景通常情况Java 实现查询 Elasticsearch 全部数据写在最后需求背景通常情况下