Elasticsearch 近实时

本文涉及的产品
Elasticsearch Serverless通用抵扣包,测试体验金 200元
简介: 【11月更文挑战第1天】

Elasticsearch (ES) 是一个高度可扩展的开源全文搜索引擎,它能够提供近实时 (Near Real-Time, NRT) 的搜索能力。这意味着,当你向 ES 中写入数据后,这些数据会在极短的时间内(通常是毫秒到秒级别)变得可搜索,但不是绝对意义上的实时。

近实时搜索的工作原理

  1. 数据写入与刷新 (Refresh)

    • 当数据被写入 ES 时,它首先被存储在一个内存缓冲区 (In-Memory Buffer) 中。
    • 定期(默认每秒一次),或者当缓冲区达到一定大小时,内存中的数据会被刷新 (Refresh) 到一个新的索引段 (Index Segment) 并打开供搜索使用。
    • 用户也可以通过 API 手动触发刷新操作,以立即使新数据可搜索。
  2. 索引段 (Segment) 与倒排索引

    • ES 基于 Apache Lucene 构建,Lucene 使用分段 (Segment) 存储数据。每个索引段都是一个独立的、已优化的倒排索引。
    • 新数据先被加入内存中的索引段,刷新时,这个内存中的索引段被写入磁盘并加入到搜索范围中。
  3. 事务日志 (Translog) 与可靠性

    • 为了确保数据的可靠性,ES 在数据写入内存缓冲区后,还会将其写入事务日志 (Transaction Log, Translog)。
    • 如果系统崩溃或电源故障,重启后可以通过重放 Translog 中的操作恢复未刷新到磁盘的数据。
  4. 提交点 (Commit Point) 与数据可见性

    • Lucene 使用提交点 (Commit Point) 跟踪哪些索引段是可以用于搜索的。当有新的索引段被刷新并认为安全时,就会创建一个新的提交点。
    • 搜索请求总是参考最新的提交点,确保只访问已提交的、稳定的索引段。
  5. Flush 与数据持久化

    • 除了刷新操作,ES 还有一个 Flush 过程,它会将内存中的所有未刷写到磁盘的索引段强制写入磁盘,并清空 Translog。
    • Flush 主要是为了解决 Translog 过大导致恢复时间过长的问题,以及确保数据在节点故障时不会丢失。

近实时搜索的权衡

  • 延迟与资源消耗:更频繁的刷新可以减少数据变为可搜索的延迟,但会增加 CPU 和 I/O 资源的消耗。
  • 数据一致性:在刷新间隔内,新写入的数据可能还未对搜索可见,这取决于刷新策略。
  • 段数量控制:频繁的刷新会导致索引段数量增多,影响搜索性能。ES 通过段合并 (Merge) 机制来解决这个问题。

结论

Elasticsearch 的近实时搜索能力是通过一系列精心设计的数据处理流程实现的,它在保证高性能的同时,还能够提供几乎实时的数据更新可见性,这对于大多数应用程序来说已经足够满足需求。然而,对于需要绝对实时性的场景,可能需要进一步调整 ES 的配置或采取其他措施。

相关实践学习
以电商场景为例搭建AI语义搜索应用
本实验旨在通过阿里云Elasticsearch结合阿里云搜索开发工作台AI模型服务,构建一个高效、精准的语义搜索系统,模拟电商场景,深入理解AI搜索技术原理并掌握其实现过程。
ElasticSearch 最新快速入门教程
本课程由千锋教育提供。全文搜索的需求非常大。而开源的解决办法Elasricsearch(Elastic)就是一个非常好的工具。目前是全文搜索引擎的首选。本系列教程由浅入深讲解了在CentOS7系统下如何搭建ElasticSearch,如何使用Kibana实现各种方式的搜索并详细分析了搜索的原理,最后讲解了在Java应用中如何集成ElasticSearch并实现搜索。  
目录
相关文章
|
SpringCloudAlibaba 网络协议 Cloud Native
Spring Cloud Alibaba-全面详解(学习总结---从入门到深化)
Spring Cloud Alibaba致力于提供微服务开发的一站式解决方案。
14826 2
Spring Cloud Alibaba-全面详解(学习总结---从入门到深化)
|
Python
Python 的异步编程: 解释什么是事件循环(Event Loop)?
Python 的异步编程: 解释什么是事件循环(Event Loop)?
647 2
|
12月前
|
消息中间件 Java 大数据
Kafka ISR机制详解!
本文详细解析了Kafka的ISR(In-Sync Replicas)机制,阐述其工作原理及如何确保消息的高可靠性和高可用性。ISR动态维护与Leader同步的副本集,通过不同ACK确认机制(如acks=0、acks=1、acks=all),平衡可靠性和性能。此外,ISR机制支持故障转移,当Leader失效时,可从ISR中选取新的Leader。文章还包括实例分析,展示了ISR在不同场景下的变化,并讨论了其优缺点,帮助读者更好地理解和应用ISR机制。
766 0
Kafka ISR机制详解!
|
搜索推荐 物联网 智能硬件
智能穿戴设备的应用场景
智能穿戴设备的应用场景广泛且多样化,它们不仅提升了日常生活的便利性,还融入了健康管理和科技娱乐等多个方面。以下是一些具体的智能穿戴设备应用场景:
|
存储 消息中间件 JSON
DDD基础教程:一文带你读懂DDD分层架构
DDD基础教程:一文带你读懂DDD分层架构
|
运维 监控 Kubernetes
高效应对突增流量:构建弹性高性能的SMS网关策略
本篇内容来自于ArchSummit全球架构师峰会演讲实录。
398 1
|
自然语言处理 分布式计算 算法
阿里云云通信风控系统的架构与实践
阿里云云通信风控系统
9285 12
阿里云云通信风控系统的架构与实践
vue3 【提效】全局布局 vite-plugin-vue-layouts 实用教程
vue3 【提效】全局布局 vite-plugin-vue-layouts 实用教程
989 0
|
存储 负载均衡 监控
redis 集群模式(redis cluster)介绍
redis 集群模式(redis cluster)介绍
|
Java 编译器 Spring
面试突击78:@Autowired 和 @Resource 有什么区别?
面试突击78:@Autowired 和 @Resource 有什么区别?
15095 5