es基本概念

news2025/4/10 21:03:47

Elasticsearch 的架构与基本概念

Elasticsearch(简称 ES)是一个开源的分布式搜索和分析引擎,基于 Apache Lucene 构建。它被广泛用于全文搜索、日志分析、实时数据分析等场景。以下是其架构概述及其基本概念的详细解释。

Elasticsearch 的架构

Elasticsearch 的架构设计为分布式、高可用和可扩展,核心是一个多节点的集群结构。以下是其主要组成部分和工作方式:

1. 集群(Cluster)

  • 定义:一个 Elasticsearch 集群由多个节点(Node)组成,共同工作以存储数据和处理请求。
  • 特性
    • 集群有一个唯一的名称(默认 elasticsearch),用于区分不同的集群。
    • 节点通过网络通信,共同维护数据和状态。

2. 节点(Node)

  • 定义:运行 Elasticsearch 实例的单个服务器或进程。
  • 角色(可组合):
    • 主节点(Master Node):负责集群管理(如分片分配、节点加入/退出)。
    • 数据节点(Data Node):存储数据,执行索引和搜索操作。
    • 摄取节点(Ingest Node):预处理数据。
    • 协调节点(Coordinating Node):路由请求和聚合结果。
  • 配置:通过 node.roles 指定(7.9+),例如 node.roles: ["master", "data"]
  • 特点:节点可以动态加入或离开集群,自动重新平衡数据。

3. 索引(Index)

  • 定义:类似于传统数据库中的“数据库”,是数据的逻辑容器。
  • 特性
    • 每个索引包含一组文档(Document),并定义了数据的结构(Mapping)。
    • 索引被分成多个分片存储在集群中。
  • 示例logs-2023-01(日志索引)。

4. 分片(Shard)

  • 定义:索引被分成多个分片,每个分片是一个独立的 Lucene 实例,存储部分数据。
  • 类型
    • 主分片(Primary Shard):原始数据存储位置,负责写入。
    • 副本分片(Replica Shard):主分片的副本,用于冗余和高可用。
  • 特点
    • 分片数量在创建索引时指定(默认 1),不可更改。
    • 副本数量可动态调整(默认 1)。
  • 分布:分片分布在集群的多个节点上,实现负载均衡和容错。

5. 文档(Document)

  • 定义:索引中的基本数据单元,类似于数据库中的一行。
  • 格式:JSON 格式,包含字段(Field)和值。
  • 示例
    {
      "id": 1,
      "title": "Elasticsearch Guide",
      "content": "This is a guide to ES."
    }
    

6. 映射(Mapping)

  • 定义:定义文档字段的类型和存储方式,类似于数据库的表结构。
  • 类型:文本(text)、关键字(keyword)、数字(integer/float)、日期(date)等。
  • 动态性
    • 默认动态映射:自动推断字段类型。
    • 显式映射:手动定义以优化性能。

7. 倒排索引(Inverted Index)

  • 定义:Lucene 核心数据结构,将词(term)映射到包含该词的文档 ID。
  • 作用:支持快速全文搜索。
  • 示例
    Term       | Doc IDs
    -----------|---------
    elastic    | 1, 3
    search     | 1, 2
    

基本概念

以下是 Elasticsearch 的核心概念,帮助理解其工作机制:

  1. 集群(Cluster)

    • 一组协同工作的节点,共享数据和负载。
    • 通过 cluster.name 标识。
  2. 节点(Node)

    • 集群中的单个实例,承担特定角色。
    • 通过配置文件(如 elasticsearch.yml)设置。
  3. 索引(Index)

    • 数据的逻辑分组,包含多个分片。
    • 通过 REST API 创建,例如:
      curl -X PUT "localhost:9200/my-index"
      
  4. 分片(Shard)

    • 数据分片单元,主分片和副本分片共同确保高可用和性能。
    • 主分片数影响并行性,副本数影响容错性。
  5. 文档(Document)

    • JSON 格式的数据单元,存储在索引中。
    • 通过唯一 ID 标识,例如:
      curl -X POST "localhost:9200/my-index/_doc/1" -d '{"title": "Test"}'
      
  6. 映射(Mapping)

    • 定义字段的类型和索引方式。
    • 示例:
      {
        "mappings": {
          "properties": {
            "title": { "type": "text" },
            "date": { "type": "date" }
          }
        }
      }
      
  7. 倒排索引(Inverted Index)

    • 搜索的核心,支持关键词快速定位文档。
  8. 主选举(Master Election)

    • 集群通过选举选择一个主节点,负责协调操作。
    • 使用 Zen Discovery(6.x)或 Voting(7.x+)机制。
  9. 复制(Replication)

    • 数据在主分片和副本分片间复制,确保高可用。
    • 写入主分片后同步到副本。
  10. 查询(Query)

    • 通过 REST API 执行搜索和分析。
    • 示例:
      curl -X GET "localhost:9200/my-index/_search?q=title:elastic"
      

架构工作流程

写入流程

  1. 客户端发送写入请求到协调节点。
  2. 协调节点路由请求到主分片所在的数据节点。
  3. 主分片写入数据并同步到副本分片。
  4. 多数副本确认后,返回成功响应。

搜索流程

  1. 客户端发送搜索请求到协调节点。
  2. 协调节点广播查询到所有相关分片(主分片或副本)。
  3. 各分片执行查询并返回结果。
  4. 协调节点聚合结果,返回给客户端。

容错机制

  • 主节点故障:自动选举新主节点。
  • 数据节点故障:副本分片接管,集群重新分配分片。

架构图示(简易版)

[Client] --> [Coordinating Node]
                |
    +-----------+-----------+
    |                       |
[Master Node]       [Data Nodes]
                        |
                  [Shards: P0, R0, P1, R1]
  • Client:发送请求。
  • Coordinating Node:路由和聚合。
  • Master Node:管理集群状态。
  • Data Nodes:存储分片(P=Primary, R=Replica)。

优点与特性

  • 分布式:数据和负载分布在多节点。
  • 高可用:副本分片提供冗余。
  • 可扩展:动态添加节点。
  • 实时性:近实时搜索(默认 1 秒刷新)。

总结

Elasticsearch 的架构是一个分布式系统,核心由集群、节点、索引、分片和文档组成。它通过倒排索引实现高效搜索,通过主分片和副本分片确保数据可靠性和性能。基本概念如映射、复制和查询是理解其功能的关键。如果需要深入某部分(例如分片分配或查询优化),可以告诉我,我会进一步讲解!


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

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

相关文章

11-产品经理-创建产品

在“产品”-“仪表盘”内,可以查看系统中关于产品及相关需求的统计。 在“产品”-“产品列表”页面,可以按项目集、项目查看其关联产品。还可以添加产品、编辑产品线、或者导出产品列表。 产品看板,通过看板方式查看产品、产品计划和产品下的…

低代码开发平台:飞帆制作网页并集成到自己的网页中

应用场景: 有时,我们的网页使用了某个模版,或者自己写的 html、css、javascript 代码。只是网页中的一部分使用飞帆来制作。这样的混合网页如何实现呢? 其实很容易,来体验一下飞帆提供的功能! 还记得这个…

语法: result=log (x);

LOG( ) 语法: resultlog (x); 参数: x是一个浮点数; 返回值: result等于返回值,是一个浮点数; 功能: 该函数是用来计算浮点数x的自然对数(即ln x);如果x小于或等于0,或x太大,则行为没有定义; 注意:存在error挂起; 如果在编写程序里包含了errno.h头文件,则范围和等级…

Hibernate核心方法总结

Session中的核心方法梳理 1、save方法 这个方法表示将一个对象保存到数据库中,可以将一个不含OID的new出来的临时对象转换为一个处于Session缓存中具有OID的持久化对象。 需要注意的是:在save方法前设置OID是无效的但是也不会报错,在save方…

IntelliJ IDEA Maven 工具栏消失怎么办?

一、问题现象与背景 在使用 IntelliJ IDEA(简称 IDEA)开发 Maven 项目时,偶尔会遇到右侧或侧边栏的 Maven 工具栏(显示依赖、生命周期等信息的窗口)突然消失的情况。这可能影响开发者快速操作 Maven 构建、依赖管理等…

消息队列(kafka 与 rocketMQ)

为什么要使用消息队列?作用1: 削峰填谷(突发大请求量问题)作用2: 解耦(单一原则)作用3: 异步(减少处理时间) 如何选择消息队列(kafka&RocketMQ)成本功能性能选择 rocketMQ是参考kafka进行实现的为什么rocketMQ与kafka性能差距很大呢?kafka 的底层数据储存实现rocketMQ 的…

【STM32】Flash详解

【STM32】Flash详解 文章目录 【STM32】Flash详解1.Flash闪存概念1. 1核心区别:NOR Flash vs. NAND Flash1.2 为什么常说的“Flash”多指 NAND Flash?1.3技术细节对比(1) 存储单元结构(2) 应用场景(3) 可靠性要求 1.4总结 2.STM32内部的Flash2.1为什么是…

CV - 目标检测

物体检测 目标检测和图片分类的区别: 图像分类(Image Classification) 目的:图像分类的目的是识别出图像中主要物体的类别。它试图回答“图像是什么?”的问题。 输出:通常输出是一个标签或一组概率值&am…

node-modules-inspector 可视化node_modules

1、node_modules 每个vue的项目都有很多的依赖,有的是dev的,有的是生产的。 2、使用命令pnpx node-modules-inspector pnpx node-modules-inspector 3、node_modules可视化 4、在线体验 Node Modules Inspector 5、github地址 https://github.com/a…

远程服务器下载llama模型

适用于有防火墙不能直接从HF上下载的情况 然后,你可以克隆 Llama-3.1-8B-Instruct 模型: git clone https://你的用户名:你的访问令牌hf-mirror.com/meta-llama/Llama-3.1-8B-Instruct用户名,令牌来自huggingface官网 注意:要提…

2011-2019年各省地方财政金融监管支出数据

2011-2019年各省地方财政金融监管支出数据 1、时间:2007-2019年 2、来源:国家统计局、统计年鉴 3、指标:行政区划代码、地区、年份、地方财政金融监管支出 4、范围:31省 5、指标说明:地方财政在金融监管方面的支出…

Java大厂面试题 -- JVM 优化进阶之路:从原理到实战的深度剖析(2)

最近佳作推荐: Java大厂面试题 – 深度揭秘 JVM 优化:六道面试题与行业巨头实战解析(1)(New) 开源架构与人工智能的融合:开启技术新纪元(New) 开源架构的自动化测试策略优…

存储引擎 / 事务 / 索引

1. 存储引擎 MySQL 中特有的术语。 (Oracle 有,但不叫这个名字) 是一种表存储 / 组织数据的方式 不同的存储引擎,表存储数据的方式不同 1.1 查看存储引擎 命令: show engines \g(或大写:G…

RabbitMQ运维

RabbitMQ运维 一.集群1.简单介绍2.集群的作用 二.搭建集群1.多机多节点搭建步骤 2.单机单节点搭建步骤 3.宕机演示 三.仲裁队列1.简单介绍2.Raft协议Raft基本概念主节点选举选举过程 3.仲裁队列的使用 四.HAProxy负载均衡1.安装HAProxy2.HAProxy的使用 一.集群 1.简单介绍 Ra…

Ansible 实战:Roles,运维的 “魔法函数”

一、介绍 你现在已经学过tasks和handlers,那么,最好的playbook组织方式是什么呢?答案很简单:使用roles!roles基于一种已知的文件结构,能够自动加载特定的vars_files、tasks以及handlers。通过roles对内容进…

关于JVM和OS中的指令重排以及JIT优化

关于JVM和OS中的指令重排以及JIT优化 前言: 这东西应该很重要才对,可是大多数博客都是以讹传讹,全是错误,尤其是JVM会对字节码进行重排都出来了,明明自己测一测就出来的东西,写出来误人子弟… 研究了两天&…

在CPU服务器上部署Ollama和Dify的过程记录

在本指南中,我将详细介绍如何在CPU服务器上安装和配置Ollama模型服务和Dify平台,以及如何利用Docker实现这些服务的高效部署和迁移。本文分为三大部分:Ollama部署、Dify环境配置和Docker环境管理,适合需要在本地或私有环境中运行A…

【计网】TCP 协议详解 与 常见面试题

三次握手、四次挥手的常见面试题 不用死记,只需要清楚三次握手,四次挥手的流程,回答的时候心里要记住,假设网络是不可靠的 问题(1):为什么关闭连接时需要四次挥手,而建立连接却只要三次握手? 关…

7.4 SVD 的几何背景

一、SVD 的几何解释 SVD 将矩阵分解成三个矩阵的乘积: ( 正交矩阵 ) ( 对角矩阵 ) ( 正交矩阵 ) (\pmb{正交矩阵})\times(\pmb{对角矩阵})(\pmb{正交矩阵}) (正交矩阵)(对角矩阵)(正交矩阵),用几何语言表述其几何背景: ( 旋转 ) ( 伸缩 )…

C++的多态-上

目录 多态的概念 多态的定义及实现 1.虚函数 2. 多态的实现 2.1.多态构成条件 2.2.虚函数重写的两个例外 (1)协变(基类与派生类虚函数返回值类型不同) (2)析构函数的重写(基类与派生类析构函数的名字不同) 2.3.多态的实现 2.4.多态在析构函数中的应用 2.5.多态构成条…