es基本概念

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)和值。

  • 示例

    json 复制代码
    {
      "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 创建,例如:

      bash 复制代码
      curl -X PUT "localhost:9200/my-index"
  4. 分片(Shard)

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

    • JSON 格式的数据单元,存储在索引中。

    • 通过唯一 ID 标识,例如:

      bash 复制代码
      curl -X POST "localhost:9200/my-index/_doc/1" -d '{"title": "Test"}'
  6. 映射(Mapping)

    • 定义字段的类型和索引方式。

    • 示例:

      json 复制代码
      {
        "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 执行搜索和分析。

    • 示例:

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

复制代码
相关推荐
Hello.Reader1 小时前
Flink 内置 Watermark 生成器单调递增与有界乱序怎么选?
大数据·flink
工作中的程序员1 小时前
flink UTDF函数
大数据·flink
工作中的程序员1 小时前
flink keyby使用与总结 基础片段梳理
大数据·flink
Hy行者勇哥1 小时前
数据中台的数据源与数据处理流程
大数据·前端·人工智能·学习·个人开发
00后程序员张2 小时前
RabbitMQ核心机制
java·大数据·分布式
AutoMQ2 小时前
10.17 上海 Google Meetup:从数据出发,解锁 AI 助力增长的新边界
大数据·人工智能
武子康2 小时前
大数据-119 - Flink Flink 窗口(Window)全解析:Tumbling、Sliding、Session 应用场景 使用详解 最佳实践
大数据·后端·flink
Elasticsearch2 小时前
在 Elastic Cloud on Kubernetes 部署中的多租户示例架构
elasticsearch
阿水实证通3 小时前
能源经济大赛选题推荐:新能源汽车试点城市政策对能源消耗的负面影响——基于技术替代效应的视角
大数据·人工智能·汽车