Elasticsearch近实时架构

news2024/12/29 9:57:40

1 Elasticsearch 与 Lucene 的结构理解

在这里插入图片描述

一个Elasticsearch索引由一个或多个分片(shards)组成。这些分片可以是主分片(primary shard)或副本分片(replica shard)。每个分片都是一个独立的Lucene索引,保存了索引数据的一部分。

主分片承载了索引数据的主要部分,而副本分片则是主分片的副本,用于提高搜索和数据存储的可靠性。当主分片发生故障时,副本分片可以充当主分片,保证索引的可用性。

在默认情况下,一个Elasticsearch索引有5个主分片和1个副本分片。但是,这些设置可以根据需求进行修改。在创建索引时,可以指定主分片的数量和副本分片的数量。

当查询一个Elasticsearch索引时,查询请求会被分发到所有分片上执行,然后将各个分片的结果合并得到最终结果。这种分布式架构可以大大提高查询的效率和处理大规模数据的性能。

是的,Lucene中的Lucene索引相当于Elasticsearch中的一个分片(shard)

Lucene是一个高性能、纯Java编写的全文检索引擎,而Elasticsearch是基于Lucene构建的分布式搜索和分析引擎。在Lucene中,索引是由多个分段(segment)组成的,每个分段都是一个独立的数据集,保存了文档的倒排索引等信息。

在Elasticsearch中,索引是由多个分片(shard)组成的,每个分片都可以在多个节点上分布存储和搜索。每个分片内部实际上使用了Lucene索引的原理,即Lucene index: “a collection of segments plus a commit point”。由一堆 Segment 的集合加上一个提交点组成。因此,可以说Lucene中的Lucene索引相当于Elasticsearch中的一个分片。

需要注意的是,虽然每个Lucene索引和每个Elasticsearch分片在内部结构上相似,但它们在实际使用和管理上存在一定的差异。例如,Elasticsearch的分片可以在不同的节点上动态平衡和调整,以满足系统的负载需求和高可用性要求。

2 ES的写入过程

在这里插入图片描述

首先,当我们对记录进行修改时,es会把数据同时写到内存缓存区和translog中。而这个时候数据是不能被搜索到的,只有数据形成了segmentFile,才会被搜索到。默认情况下,es每隔一秒钟执行一次refresh,可以通过参数index.refresh_interval来修改这个刷新间隔。

  1. 不断将 Document 写入到 In-memory buffer (内存缓冲区)。
  2. 当满足一定条件后内存缓冲区中的 Documents 刷新到 高速缓存(cache)。
  3. 生成新的 segment ,这个 segment 还在 cache 中。
  4. 这时候还没有 commit ,但是已经可以被读取了。

数据从 buffer 到 cache 的过程是定期每秒刷新一次。所以新写入的 Document 最慢 1 秒就可以在 cache 中被搜索到。

而 Document 从 buffer 到 cache 的过程叫做 ?refresh 。一般是 1 秒刷新一次,不需要进行额外修改。当然,如果有修改的需要,可以参考文末的相关资料。这也就是为什么说 Elasticsearch 是准实时的。

PUT /test/_doc/1?refresh
{"test": "test"}

// 或者
PUT /test/_doc/2?refresh=true
{"test": "test"}

translog的相当于事务日志,记录着所有对Elasticsearch的操作记录,也是对Elasticsearch的一种备份。因为并不是写到segment就表示数据落到磁盘了,实际上segment是存储在系统缓存(page cache)中的,只有达到一个周期或者数据量达到一定值,才会flush到磁盘上。这个时候如果系统内存中的segment丢失,是可以通过translog来恢复的。

  1. Document 不断写入到 In-memory buffer,此时也会追加 translog。
  2. 当 buffer 中的数据每秒 refresh 到 cache 中时,translog 并没有进入到刷新到磁盘,是持续追加的。
  3. translog 每隔 5s 会 fsync 到磁盘。
  4. translog 会继续累加变得越来越大,当 translog 大到一定程度或者每隔一段时间,会执行 flush。

flush 操作会分为以下几步执行:

  1. buffer 被清空。
  2. 记录 commit point。
  3. cache 内的 segment 被 fsync 刷新到磁盘。
  4. translog 被删除。

值得注意的是:

  • translog 每 5s 刷新一次磁盘,所以故障重启,可能会丢失 5s 的数据。
  • translog 执行 flush 操作,默认 30 分钟一次,或者 translog 太大 也会执行。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/999843.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

什么是Docker和Docker-Compose?

Docker的构成 Docker仓库:https://hub.docker.com Docker自身组件 Docker Client:Docker的客户端 Docker Server:Docker daemon的主要组成部分,接受用户通过Docker Client发出的请求,并按照相应的路由规则实现路由分发…

Shell命令切换root用户、管理配置文件、检查硬件

Shell命令切换root用户、管理配置文件、检查硬件 切换root用户 两种方法 su命令详细介绍 sudo命令详细介绍 /etc/passwd文件 /etc/passwd文件里为什么有乱七八糟的用户? /etc/shadow文件 管理配置文件 检查硬件命令 查看CPU 查看GPU 与其他基于UNIX的系统…

【Java基础篇 | 面向对象】—— 继承

个人主页:兜里有颗棉花糖 欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 兜里有颗棉花糖 原创 收录于专栏【JavaSE_primary】 本专栏旨在分享学习JavaSE的一点学习心得,欢迎大家在评论区讨论💌 继承允许一个类继承另一个…

buuctf crypto 【[HDCTF2019]basic rsa】解题记录

1.打开文件 2.套用脚本 import random from binascii import a2b_hex,b2a_hex p 262248800182277040650192055439906580479 q 262854994239322828547925595487519915551 n p * q def multiplicative_inversr(a,b): x 0 y 1 lx 1 ly 0 oa a ob…

Python项目开发:Flask基于Python的天气数据可视化平台

目录 步骤一:数据获取 步骤二:设置Flask应用程序 步骤三:处理用户输入和数据可视化 步骤四:渲染HTML模板 总结 在这个数字化时代,数据可视化已经成为我们理解和解释信息的重要手段。在这个项目中,我们…

干了三年的功能测试,让我女朋友跑了,太难受了...

简单概括一下 先说一下自己的情况,普通本科,19年通过校招进入深圳某软件公司,干了3年多的功能测试,21年的那会,因为大环境不好,我整个人心惊胆战的,怕自己卷铺盖走人了,我感觉自己不…

解疑答惑:独立部署类型的商城系统有哪些优势?

数字化时代,电子商务已成为企业蓬勃发展的重要组成部分。 为了满足不断增长的在线购物需求,企业需要一个强大而可靠的商城系统。独立部署类型的商城系统因其独特的优势而备受青睐。下面就独立部署商城系统的优势作一些简单介绍,并解释为什么它…

Python中使用item()方法遍历字典的例子

前言 嗨喽,大家好呀~这里是爱看美女的茜茜呐 这篇文章主要介绍了Python中使用item()方法遍历字典的例子, for…in这种是Python中最常用的遍历字典的方法了,需要的朋友可以参考下 Python字典的遍历方法有好几种,其中一种是for…in,这个我就…

修改图片尺寸的几个简单方法

修改图片尺寸的几个简单方法~~图片,是我们常用的文件格式,也是日常生活与工作中重要的文件。图片记录了非常多的元素和内容,其中不乏有工作上的内容,也有对一些日常生活的记录。所以说,图片文件对我们来说是非常重要的…

使用轻薄款电子价签,有什么样的改价体验?

在数字化的潮流之中,「轻薄」逐渐成为ESL电子标签的强大优势,让商品管理更高效,货架保持统一高端的形象。云里物里最新发布了一款纤薄ESL电子标签,DS029厚度仅有9.8mm,在36g的轻巧身躯上融入了强大功能,将为…

FirmAFL

FirmAFL使用并改进了Firmdyne模拟方式,并利用AFL对IoT固件实施高通量灰盒Fuzzing。 一、项目简介 FIRM-AFL 是 第一个针对物联网固件的高吞吐量灰盒模糊测试器。 支持mipsel、mipseb和armel三种CPU架构 ,涵盖Firmadyne数据库中90.2%的固件。 FIRM-AFL 解…

学习笔记-配置备份静态路由及优先级

上一个笔记:学习笔记-静态路由配置有来无回导致无法访问目标IP 拓扑图: 书接上回。 模拟R2至R3之间的链路中断,配置备份路由通过R1访问R3。 shutdown掉R2的gi0/0/2端口,模拟链路中断。pingR3的gi0/0/0和R3的loopback0&#xff…

想修复Windows 10屏幕分辨率问题?这里有5种方法供你选择!

​一般来说,如果你愿意,你可以很容易地更改Windows 10计算机的屏幕分辨率。如果你发现你无法在Windows 10中更改分辨率,你可以查看下面的解决方案来解决这个问题。 检查和更改Windows 10屏幕分辨率上 一、你可以右键单击桌面的黑色空间,然后选择“显示设置”。单击“分辨…

循环购模式:美业的新机遇和新挑战

美业是一个高频消费的行业,每个人都想要拥有美丽的容颜和健康的身体。但是,美业的消费门槛往往较高,很多人会觉得美容美发等服务太贵,不敢轻易尝试。如果有一种模式,能够让消费者在享受美业服务的同时,还能…

pdf.js 微信公众号不显示问题

问题1: 在浏览器中能够正常显示, 但是在微信浏览器中不行!解决: 这个是pdf.js 版本问题, 用2.4版本,微信打开就没问题了 问题2: 如何关闭侧边栏? 修改这个地方, 将 -1 改…

Macronix MX25L25645G NOR Flash无法擦除问题分析

1. 问题现象描述 处理器使用的 SAM9X60, 使用的内核版本是 5.10.80,在调试 Macronix MX25L25645G NOR Flash时,发现flash驱动加载成功后,使用 mtd_debug 工具 erase flash时,擦除一整片flash区域时,命令执行速度很快&a…

十 动手学深度学习v2 ——卷积神经网络之NiN + GoogLeNet

文章目录 网络中的网络(NiN)InceptionGoogLeNet总结: 网络中的网络(NiN) NiN块使用卷积层加两个1x1卷积层 后者对每个像素增加了非线性性 NiN使用全局平均池化层来替代VGG和AlexNet中的全连接层 不容易过拟合&#xf…

win10CPU占用率高达100%怎么办

很多小伙伴在打开任务管理器的时候会发现win10CPU的占用率高达了100%,这使得我们的电脑用起来十分的卡顿,那么这个问题该怎么解决呢,这里小编就给大家带来win10CPU占用率高达100%的解决方法,有需要的小伙伴快来看看吧。 win10CPU占…

电子行业云MES解决方案

电子行业MES解决方案主要是针对目前电子生产制造企业面临的产品迭代升级中多品种小批量混线生产、存呆滞问题多;质量检查标准多、售后问题难追溯;生产进度难追踪、车间物料难管控、实际成本难计算等问题,提出的一种切实可行且能降低成本、提高效率的有效…

【视觉检测】电源线圈上的导线弯直与否视觉检测系统软硬件方案

 检测内容 线圈上的导线弯直与否检测系统。  检测要求 检测线圈上的导线有无弯曲,弯曲度由客户自己设定。检测速度5K/8H625PCS/H。  视觉可行性分析 对样品进行了光学实验,并进行图像处理,原则上可以使用机器视觉进行测试测量…