ElasticSearch 是一个开源的高可用分布式全文检索引擎,可以近乎实时的存储、检索数据。扩展性好,可处理PB级别的数据。使用java开发,Lucene作为核心实现所有索引和搜索的功能。全文搜索为什么简单呢?因为它通过简单的 RESTful API 来隐藏 Lucene 的复杂性。下面先简单介绍一下 ElasticSearch 的特性和发展。
Lucene:
- 基于 Java 语言开发的搜索引擎类库
- 创建于1999年,2005年成为 Apache 顶级开源项目
- Lucene 的局限性:
- 只能基于 Java 语言开发
- 类库的接口学习曲线陡峭
- 原生并不支持水平扩展
ElasticSearch 分布式架构:
- 集群规模可以从单个扩展至数百个节点
- 高可用 & 水平扩展 (服务和数据两个维度)
- 支持不同的节点类型 (支持 Hot 和 Warm 架构)
支持多种方式集成接入:
- 多种编程语言的类库(Java、.NET、Python、Ruby、PHP、Groovy、Perl)
- RESTful API vs Transport API (9200 vs 9300 建议使用 RESTful API)
- JDBC & ODBC
ElasticSearch 的主要功能:
- 海量数据的分布式存储以及集群管理 (服务与数据的高可用、水平扩展)
- 近实时搜索,性能卓越(结构化、全文、地理位置、自动完成)
- 海量数据的近实时分析(聚合功能)
ElasticSearch 版本与升级:
- 0.4:2010年2月第一次发布
- 1.0:2014年1月
- 2.0:2015年10月
- 5.0:2016年10月
- 6.0:2017年10月
- 7.0:2019年4月
新特性 5.X
- Lucene 6.x,性能提升,默认打分机制从 TF-IDF 改为DB 25
- 支持 Ingest 节点 / Painless Scripting / Completion suggested 支持 / 原生的 Java REST 客户端
- Type 标记成 deprecated,支持了 Keyword 类型
- 性能优化:
- 内部引擎移除了避免同一文档并发更新的竞争锁,带来 15% ~ 20% 的性能提升
- Instant aggregation,支持分片上聚合的缓存
- 新增了Profile API
新特性 6.X
- Lucene 7.x
- 新功能 :跨集群复制(CCR);索引生命周期管理;SQL 的支持
- 更友好的升级及数据迁移:主要版本之间的迁移更为简化,体验升级;全新的基于操作的数据复制框架,可加快恢复数据
- 性能优化:有效存储稀疏字段的新方法,降低了存储成本;在索引时进行排序,可加快排序的查询性能
新特性 7.X
- Lucene 8.0
- 重大改进:正式废除单个索引下多 Type 的支持
- 7.1 开始, Security 功能免费使用
- ECK :ElasticSearch Operator On Kubernetes
- 新功能:New Cluster coordination;Script Score Query;Feature-Complete High Level REST Client
- 性能优化:默认的 Primary Shard 数从 5 改为 1 ,避免 Over Sharding;性能优化,更快的 Top K
Elastic Stack 生态圈
Kibana 可视化分析利器:数据可视化工具,帮助用户解开对数据的任何疑问。
Beats:轻量的数据采集器,go语言开发,运行速度非常快。
Logstash:开源的服务器端数据处理管道,支持从不同来源采集数据,转换数据,并将数据发送到不同的存储库中。最初用来做日志的采集与处理。
Logstash 特性:
- 实时解析和转换数据:从 ip 地址破解出地理坐标;将 PII 数据匿名化,完全排除敏感字段
- 可扩展:200 多个插件(日志,数据库,NetFlow,Arcsigh)
- 可靠性安全性:数据传输加密;Logstash 会通过持久化队列来保证至少将运行中的事件送达一次
- 监控
ELK 应用场景:
- 网站搜索、垂直搜索、代码搜索
- 日志管理与分析、安全指标监控、应用性能监控、WEB抓取舆情分析
日志管理步骤:
- 日志搜集
- 格式化分析
- 全文检索
- 风险告警
ElasticSearch 的集成:
1. 搜索场景:单独使用 ElasticSearch 或者与数据库集成(考虑事务性,数据更新频繁,与现有系统集成)
2. 指标分析/日志分析