Elasticsearch-1--什么是ES?

分类: members365sport365 时间: 2025-12-13 21:45:14 作者: admin 阅读: 6581 点赞: 148
Elasticsearch-1--什么是ES?

Elasticsearch(简称ES)是一个分布式、高扩展、实时的、RESTful风格搜索与数据分析引擎,基于Apache Lucene构建,广泛应用于大数据领域的全文检索、日志分析、实时监控等场景。

由Elastic公司开发,使用Java编写,遵循Apache License开源协议。

1、基本概念

1、核心特点

分布式搜索引擎:通过多节点集群处理海量数据,支持水平扩展。实时分析系统:数据写入后几乎立即可检索和分析(近实时,NRT)。文档存储:以JSON格式存储数据,每个文档是独立的可索引单元。

2、核心概念

2、核心功能

1、分布式实时文件存储

每个字段均被索引并可搜索,支持大规模数据存储。数据自动分片(Sharding)和副本(Replication),实现高可用和负载均衡。

2、全文搜索

基于倒排索引(Inverted Index):将文档中的关键词映射到包含该词的文档列表。支持复杂查询,如模糊搜索、短语匹配、布尔查询等。

3、实时数据分析

提供聚合功能(Aggregation),支持统计、分组、趋势分析等。例如:统计某日志系统中的错误类型分布、用户行为分析。

4、水平扩展

支持动态扩容,集群可扩展至数百节点,处理PB级数据。

5、多租户与安全性

支持多索引隔离,可为不同用户或应用分配独立索引。内置权限控制(如基于角色的访问控制)、SSL/TLS加密、Kerberos认证等安全特性。

3、应用场景

1、搜索引擎

网站/APP搜索:如电商商品搜索、新闻检索。文档检索:企业内部文档库、知识库的全文搜索。

2、日志与监控

日志分析:结合Logstash和Kibana(ELK Stack),实时分析服务器日志、错误追踪。监控系统:收集并分析服务器指标(如CPU、内存)、网络流量,实时告警。

3、商业智能

用户行为分析:分析用户点击、购买行为,优化产品推荐。市场趋势分析:整合多源数据(如社交媒体、销售数据),辅助决策。

4、地理信息系统

支持地理空间数据索引,如地图服务中的位置搜索、距离排序。

5、实时应用

实时推荐:根据用户实时行为动态调整推荐内容。物联网数据:处理传感器实时上报的海量数据。

4、架构与原理

1、架构图

2、分布式架构

节点类型:

数据节点(Data Node):存储分片数据,执行CRUD(创建、读取、更新、删除)操作。主节点(Master Node):管理集群元数据(如节点加入/退出、索引创建)。协调节点(Client Node):接收请求并转发到目标节点,不存储数据。

节点角色说明:

分片策略:

主分片(Primary Shard):数据写入的起点。副本分片(Replica Shard):主分片的拷贝,提供容错性和读性能。

3、倒排索引

原理:将文档拆分为词条(Term),建立“词条→文档列表”的映射表。示例:

文档1:“Hello Elasticsearch” → 拆分为词条[“Hello”, “Elasticsearch”]。倒排索引:

Hello → [文档1]

Elasticsearch → [文档1]

4、分布式协调

Zen Discovery:节点自动发现机制,选举主节点并维护集群状态。分片分配:通过权重算法(如索引平衡因子、分片平衡因子)动态调整分片分布。

5、数据写入流程

1、客户端发送请求到任意节点(协调节点)。

2、协调节点根据文档ID计算目标分片(分片 = hash(文档ID) % 主分片数)。

3、数据写入主分片,主分片同步到副本分片。

4、确认写入成功后返回响应。

6、数据查询流程

1、客户端发送查询请求。

2、协调节点将查询广播到所有相关分片(主分片或副本分片)。

3、各分片本地执行查询并返回结果。

4、协调节点合并结果,排序后返回最终结果。

数据流示例:(一次搜索请求)

(1)、客户端发送搜索请求 → Coordinating Node

(2)、协调节点查询集群状态(由 Master Node 管理)确定相关分片位置

(3)、请求被并行转发到包含目标分片的 Data Node 1 和 Data Node 2

(4)、数据节点执行本地搜索,返回结果给协调节点

(5)、协调节点聚合结果,返回最终响应给客户端

5、RESTFUL API使用示例

1、创建索引

PUT /my_index

{

"settings": {

"number_of_shards": 3,

"number_of_replicas": 1

},

"mappings": {

"properties": {

"title": { "type": "text" },

"price": { "type": "float" },

"created": { "type": "date" }

}

}

}

2、插入文档

POST /my_index/_doc/1

{

"title": "Elasticsearch 入门",

"price": 59.9,

"created": "2025-08-19"

}

3、搜索文档

GET /my_index/_search

{

"query": {

"match": {

"title": "elasticsearch"

}

}

}

4、聚合分析

GET /my_index/_search

{

"aggs": {

"avg_price": {

"avg": { "field": "price" }

}

}

}

6、优势与挑战

优势:

高性能:倒排索引和分布式架构支持毫秒级响应。易扩展:动态扩容,支持PB级数据。实时性:数据写入后1秒内可检索。灵活性:支持结构化、半结构化和非结构化数据。开放生态:与大数据、云原生、K8s集成良好

挑战:

资源消耗:内存和磁盘占用较高,需合理配置JVM参数。复杂性:集群管理和调优(如分片数量、副本数)需要经验。不适合事务型操作:不是数据库替代品。数据一致性:默认为最终一致性,对强一致性场景需权衡。

7、使用建议

在生产环境中,建议将 Master Node 与 Data Node 角色分离,避免主节点负载过高导致集群不稳定。合理设置分片数:避免过多分片(每个节点建议< 1000个分片)使用别名(Alias):便于索引滚动更新(如logs-write, logs-read)冷热架构:热节点用SSD,冷节点用HDD定期清理旧数据:使用ILM(Index Lifecycle Management)启用慢查询日志:定位性能瓶颈备份快照:定期备份到S3、HDFS等

8、生态系统(ELK Stack)

Elasticsearch 通常与其他工具配合使用,构成 Elastic Stack(原 ELK Stack)

工作流程:

数据源(日志文件/指标数据)→ File Beats → Logstash(处理)→ Elasticsearch(存储)→ Kibana(可视化)

9、实际案例

GitHub:使用ES索引和搜索超过800万代码仓库。Docker Hub:使容器镜像库可搜索。Netflix:实时监控和分析流媒体服务日志。电商系统:商品搜索、用户行为分析、推荐系统。

10、部署与优化

部署方式:

本地部署:单节点或多节点集群。云服务:AWS Elasticsearch Service、Azure HDInsight、华为云ES服务。

优化建议:

分片设计:合理设置分片数量(避免过多分片增加开销)。副本策略:根据查询负载调整副本数。JVM调优:分配足够堆内存(通常不超过31GB)。索引策略:使用时间序列索引(如日志场景),定期合并分段(Force Merge)。

11、总结

Elasticsearch以其分布式架构、实时搜索、灵活的数据模型和丰富的生态系统,成为大数据领域不可或缺的工具。无论是日志分析、搜索引擎还是实时监控,ES都能提供高效、可扩展的解决方案。然而,其复杂性和资源消耗也要求开发者具备一定的运维和调优能力。随着云原生和实时分析需求的增长,Elasticsearch的应用场景将持续扩展。Elasticsearch是当前最流行的分布式搜索与分析引擎,特别适合:需要快速搜索 + 复杂分析 + 实时响应的场景。结合Kibana可视化,Beats/Logstash数据采集,构成了强大的可观测性平台(Observability)和搜索平台。

向阳前行,Dare To Be!!!

相关推荐