Elasticsearch 近实时

简介: 【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并实现搜索。  
目录
相关文章
|
JSON NoSQL Redis
redis-full-check校验工具
redis-full-check是阿里云Redis&MongoDB团队开源的用于校验2个redis数据是否一致的工具,通常用于redis数据迁移后正确性的校验。
27332 0
|
SQL 存储 关系型数据库
解析MySQL Binlog:从零开始的入门指南【binlog入门指南】
解析MySQL Binlog:从零开始的入门指南【binlog入门指南】
14325 0
|
3月前
|
人工智能 数据挖掘 Linux
一个人就是一支队伍:阿里云/本地部署OpenClaw多Agent协作实战、配置免费大模型API及避坑指南
在AI工具普及的今天,仅靠单个Agent处理所有任务,会面临上下文混乱、专业度不足、重复解释背景等问题。OpenClaw提供了一套完整的多Agent协作架构,让你可以**一人管理一支AI团队**:研究、写作、设计、开发、运营、数据分析等角色各司其职、独立记忆、互不干扰,实现零沟通成本、高效率并行执行。从“自己动手”升级为“管理AI团队”,是新一代AI使用者的核心能力。
704 1
|
6月前
|
消息中间件 存储 Java
消息中间件RabbitMQ(高级)
本节深入RabbitMQ高级特性,涵盖消息可靠性保障、持久化、消费者确认与重试机制,结合TTL与死信交换机实现延迟队列,通过惰性队列解决消息堆积,并详解普通集群、镜像集群及仲裁队列的搭建与应用,全面提升RabbitMQ在生产环境中的高可用与稳定性。
325 0
|
Ubuntu Linux Go
golang编译成Linux可运行文件
本文介绍了如何在 Linux 上编译和运行 Golang 程序,涵盖了本地编译和交叉编译的步骤。通过这些步骤,您可以轻松地将 Golang 程序编译成适合 Linux 平台的可执行文件,并在目标服务器上运行。掌握这些技巧,可以提高开发和部署 Golang 应用的效率。
3138 14
|
算法 API Apache
Flink CDC:新一代实时数据集成框架
本文源自阿里云实时计算团队 Apache Flink Committer 任庆盛在 Apache Asia CommunityOverCode 2024 的分享,涵盖 Flink CDC 的概念、版本历程、内部实现及社区未来规划。Flink CDC 是一种基于数据库日志的 CDC 技术实现的数据集成框架,能高效完成全量和增量数据的实时同步。自 2020 年以来,Flink CDC 经过多次迭代,已成为功能强大的实时数据集成工具,支持多种数据库和数据湖仓系统。未来将进一步扩展生态并提升稳定性。
5412 3
Flink CDC:新一代实时数据集成框架
|
存储 NoSQL 算法
面试官:Redis 大 key 多 key,你要怎么拆分?
本文介绍了在Redis中处理大key和多key的几种策略,包括将大value拆分成多个key-value对、对包含大量元素的数据结构进行分桶处理、通过Hash结构减少key数量,以及如何合理拆分大Bitmap或布隆过滤器以提高效率和减少内存占用。这些方法有助于优化Redis性能,特别是在数据量庞大的场景下。
面试官:Redis 大 key 多 key,你要怎么拆分?
|
搜索推荐 物联网 智能硬件
智能穿戴设备的应用场景
智能穿戴设备的应用场景广泛且多样化,它们不仅提升了日常生活的便利性,还融入了健康管理和科技娱乐等多个方面。以下是一些具体的智能穿戴设备应用场景:
|
监控 Dubbo Java
超详细的Sentinel入门
随着微服务的流行,服务和服务之间的稳定性变得越来越重要。Sentinel 以流量为切入点,从流量控制、熔断降级、系统负载保护等多个维度保护服务的稳定性。
超详细的Sentinel入门
|
存储 监控 负载均衡
Elasticsearch 集群副本
【8月更文挑战第24天】
490 13