带你读《Elastic Stack 实战手册》之39:——3.4.2.20.Refresh/flush(中)

本文涉及的产品
Elasticsearch Serverless通用抵扣包,测试体验金 200元
简介: 带你读《Elastic Stack 实战手册》之39:——3.4.2.20.Refresh/flush(中)

《Elastic Stack 实战手册》——三、产品能力——3.4.入门篇——3.4.2.Elasticsearch基础应用——3.4.2.20.Refresh/flush(上) https://developer.aliyun.com/article/1229332


Elasticsearch 中的 flush

 

Flush 实质上意味着将内存缓冲区中的所有文档都写入新的 Lucene Segment,如下面的图所示。 这些连同所有现有的内存段一起被提交到磁盘,ES 6.7 之后,为了支持 CCR 跨集群复制,translog 默认会保留12小时。commit 本质上就是 Lucene commit。


image.png

 

 

Flush 会每30分钟定期触发,也可以在 Translog 达到 512MB 大小时触发。 这些设置可以防止 Lucene 提交带来的不必要的成本。

 

Segment 段合并

 

由于自动刷新流程每秒会创建一个新的段,这样会导致短时间内的段数量暴增。而段数目太多会带来较大的麻烦。 每一个段都会消耗文件句柄、内存和 CPU 运行周期。更重要的是,每个搜索请求都必须轮流检查每个段;所以段越多,搜索也就越慢。

 

Elasticsearch 通过在后台进行段合并来解决这个问题。小的段被合并到大的段,然后这些大的段再被合并到更大的段。

 

段合并的时候会将那些旧的已删除文档从文件系统中清除。被删除的文档(或被更新文档的旧版本)不会被拷贝到新的大段中。

 

启动段合并不需要你做任何事。进行索引和搜索时会自动进行。这个流程像在下图中表示的, “两个提交了的段和一个未提交的段正在被合并到一个更大的段” 中提到的一样工作:

 


1、当索引的时候,刷新(refresh)操作会创建新的段并将段打开以供搜索使用。

2、合并进程选择一小部分大小相似的段,并且在后台将它们合并到更大的段中。这并不会中断索引和搜索。

 

image.png


两个提交了的段和一个未提交的段正在被合并到一个更大的段

 

3、一旦合并结束,老的段被删除,说明合并完成:

 

l 新的段被刷新(flush)到了磁盘。 写入一个包含新段且除旧的和较小的段的新提交点。

l 新的段被打开用来搜索。

l 老的段被删除。

 

image.png


合并大的段需要消耗大量的 I/O 和 CPU 资源,如果任其发展会影响搜索性能。Elasticsearch 在默认情况下会对合并流程进行资源限制,所以搜索仍然 有足够的资源很好地执行。

 

Forcemerge 强制合并

 

forcemerge API 是强制合并 API。它会将一个分片强制合并到 max_num_segments 参数指定大小的段数目。 这样做的意图是减少段的数量(通常减少到一个),来提升搜索性能。

 

forcemerge API 不应该被用在一个正在被活跃使用或者一个正积极更新的索引。后台合并流程已经可以很好地完成工作。forcemerge 会阻碍这个进程。不要干扰它!

 

在特定情况下,使用 forcemerge API 颇有益处。例如在日志这种用例下,每天、每周、每月的日志被存储在一个索引中。 老的索引实质上是只读的;它们也并不太可能会发生变化。

 

在这种情况下,使用 forcemerge 优化老的索引,将每一个分片合并为一个单独的段就很有用了;这样既可以节省资源,也可以使搜索更加快速:

 

POST /my-index-000002/_forcemerge?max_num_segments=1

合并索引中的每个分片为一个单独的段

 

请注意,使用 forcemerge API 触发段合并的操作不会受到任何资源上的限制。这可能会消耗掉你节点上全部的 I/O 资源, 使其没有余裕来处理搜索请求,从而有可能使集群失去响应。如果你想要对索引执行 forcemerge,你需要先使用分片分配把索引移到一个安全的节点再执行,或者在业务低峰期执行。


《Elastic Stack 实战手册》——三、产品能力——3.4.入门篇——3.4.2.Elasticsearch基础应用——3.4.2.20.Refresh/flush(下) https://developer.aliyun.com/article/1229329

相关实践学习
以电商场景为例搭建AI语义搜索应用
本实验旨在通过阿里云Elasticsearch结合阿里云搜索开发工作台AI模型服务,构建一个高效、精准的语义搜索系统,模拟电商场景,深入理解AI搜索技术原理并掌握其实现过程。
ElasticSearch 最新快速入门教程
本课程由千锋教育提供。全文搜索的需求非常大。而开源的解决办法Elasricsearch(Elastic)就是一个非常好的工具。目前是全文搜索引擎的首选。本系列教程由浅入深讲解了在CentOS7系统下如何搭建ElasticSearch,如何使用Kibana实现各种方式的搜索并详细分析了搜索的原理,最后讲解了在Java应用中如何集成ElasticSearch并实现搜索。  
相关文章
|
Arthas 监控 Java
|
8月前
|
存储 关系型数据库 MySQL
美团面试:MySQL为什么 不用 Docker部署?
45岁老架构师尼恩在读者交流群中分享了关于“MySQL为什么不推荐使用Docker部署”的深入分析。通过系统化的梳理,尼恩帮助读者理解为何大型MySQL数据库通常不使用Docker部署,主要涉及性能、管理复杂度和稳定性等方面的考量。文章详细解释了有状态容器的特点、Docker的资源隔离问题以及磁盘IO性能损耗,并提供了小型MySQL使用Docker的最佳实践。此外,尼恩还介绍了Share Nothing架构的优势及其应用场景,强调了配置管理和数据持久化的挑战。最后,尼恩建议读者参考《尼恩Java面试宝典PDF》以提升技术能力,更好地应对面试中的难题。
|
10月前
|
API
通用图片搜索-搜狗源免费API接口教程
该接口用于搜索指定关键词并返回搜狗图片搜索结果,支持POST和GET请求。主要参数包括用户ID、用户KEY、关键词、页码及返回图片类型等。返回结果包含状态码、信息提示、结果集及当前页码。示例中提供了详细的请求与响应格式。
|
11月前
|
存储 JSON 关系型数据库
MySQL 5.x和MySQL 8.x到底有什么区别?
本文详细对比了MySQL 5.x与MySQL 8.x的主要区别,包括存储引擎改进、性能提升、SQL语法增强(如窗口函数、CTE、JSON支持)、安全性和权限管理、并发及锁机制、InnoDB引擎增强、复制与高可用性等方面的显著差异。通过具体示例展示了8.x版本在企业级应用和高并发场景下的优越表现,建议有条件时尽早升级至MySQL 8.x以充分利用其新特性。
|
数据可视化
8个常见的数据可视化错误以及如何避免它们
本文揭示了8个数据可视化常见错误:误导色彩对比、过多的数据图表、省略基线、误导性标签、错误的可视化方法、不实的因果关系、放大有利数据和滥用3D图形。强调清晰、准确和洞察力的重要性,提醒制作者避免使用过多颜色、一次性展示大量数据、错误图表类型以及展示无关相关性等。正确可视化能有力支持决策,不应牺牲真实性以追求视觉效果。
1201 6
|
Go Unix 开发者
Go语言time库,时间和日期相关的操作方法
Go语言time库,时间和日期相关的操作方法
296 0
Go语言time库,时间和日期相关的操作方法
1034 有理数四则运算 (20 分)
1034 有理数四则运算 (20 分)
|
搜索推荐
ICDE 2023 | DCMT:基于因果纠偏的直接全空间多任务转化率预测模型
ICDE 2023 | DCMT:基于因果纠偏的直接全空间多任务转化率预测模型
1537 0
ICDE 2023 | DCMT:基于因果纠偏的直接全空间多任务转化率预测模型
|
canal 消息中间件 SQL
基于Canal和Kafka实现MySQL的Binlog近实时同步
近段时间,业务系统架构基本完备,数据层面的建设比较薄弱,因为笔者目前工作重心在于搭建一个小型的数据平台。优先级比较高的一个任务就是需要近实时同步业务系统的数据(包括保存、更新或者软删除)到一个另一个数据源,持久化之前需要清洗数据并且构建一个相对合理的便于后续业务数据统计、标签系统构建等扩展功能的数据模型。基于当前团队的资源和能力,优先调研了Alibaba开源中间件Canal的使用。这篇文章简单介绍一下如何快速地搭建一套Canal相关的组件。
1133 0
基于Canal和Kafka实现MySQL的Binlog近实时同步
数据结构172-红黑树的变换之案例练习02插入10 9 8 7 6 5 4 3 2 1
数据结构172-红黑树的变换之案例练习02插入10 9 8 7 6 5 4 3 2 1
97 0
数据结构172-红黑树的变换之案例练习02插入10 9 8 7 6 5 4 3 2 1