【Elasticsearch系列(一)】什么是Elasticsearch?

一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第11天,点击查看活动详情

简介

ElasticSearch 是一款基于 JSON 的分布式搜索引擎,简称 ES

ElasticSearch 基于 Lucene,隐藏了 Lucene 的复杂性,取而代之的是对外提供了一套简单一致的 Restful API

Elastic Stack 还被广泛运用在大数据近实时分析领域,包括:日志分析指标监控信息安全 等。它可以帮助你探索海量结构化、非结构化数据,按需创建可视化报表,对监控数据设置报警阈值,通过使用机器学习,自动识别异常状况

ES 能做什么

ES 最擅长的,就是搜索!特别是模糊搜索!数字、文本、地理位置、结构化数据、非结构化数据。适用于所有数据类型。全文本搜索只是全球众多公司利用 Elasticsearch 解决各种挑战的冰山一角

对于数据来说,我们可以分为以下三种:

1)结构型数据

简单来说,结构型数据就是可以用二维表结构来组织的数据,称为结构型数据

比如学生信息可以这样表述

{
  "name": "吉尔裤裆甩",
  "age": 18,
  "length": 18
  "high": 180
}
复制代码

这些信息我们通常保存在关系型数据库中,比如 MySQL,Oracle 数据库,可以通过 SQL 很方便的管理这些数据,通过索引也可以加快我们查询的速度

2)非结构型数据

无法用二维表结构来描述的数据被称为非结构型数据

非结构型数据有很多,比如日志文件、各种文档、图片、视频、XML、HTML 等等,这种数据一般使用非关系型数据库存储(NO SQL),比如 MongoDB、Redis……

这种数据往往使用 Key Value 形式进行保存,通过 Key 来定位数据或许很快;但是有一点要知道的是,这种数据一般都是维度广,数据量大,无法做到和关系型数据库那样搜索,更无法去遍历,难以实现模糊搜索

为了对结构化和非结构化数据进行准确的查询,ElasticSearch 诞生了,对于数据的实时采集、分析、存储、搜索,由 ElasticSearch 为核心的 Elastic Stack 有着相当不错的表现,同时也是我们必须掌握的技能

ES 中的重要概念

  • Near Realtime(NRT) - 近实时。数据提交索引后,立马就可以搜索到
  • Cluster 集群 - 集群由一个唯一的名字标识,默认为“elasticsearch”;集群名称非常重要,具有相同集群名的节点才会组成一个集群
  • Node 节点 - 存储集群的数据,参与集群的索引和搜索功能
  • Index 索引 - 索引是一个文档的集合,每个索引有唯一的名字,可以通过这个名字来操作索引;一个集群中可以有任意多个索引
  • Document 文档 - 被索引的一条数据,索引的基本信息单元,以JSON格式来表示
  • Shard 分片 - 在创建一个索引时可以指定分成多少个分片来存储。每个分片本身也是一个功能完善且独立的“索引”,可以被放置在集群的任意节点上
  • Replication 备份 - 一个分片可以有多个备份(副本)

与关系型数据库的基本概念对比

关系型数据库 ElasticSearch
数据库(Database) 索引(Index)
表(Table) 类型(Type)(将被废弃)
行(Row) 文档(Document)
列(Column) 字段(Field)
表结构(Schema) 映射(Mapping)
索引 倒排索引(重点)
SQL 查询 DSL
SELECT * FROM TABLE GET http://……
UPDATE TABLE SET PUT http://……
DELETE FROM TABLE DELETE http://……

Elastic Stack 生态

以 Elasticsesarch 为核心,先是引入了 Kibina、Logstash,称为 ELK,后来又引入了 Beats,就由 ELK 更名为 Elastic Stack

image.png

其中:

  • ES:一款基于 JSON 的分布式搜索引擎,Elastic Stack 生态的核心

  • Kibana:实现数据可视化,以图表的形式呈现数据(柱状图、线状图、饼图、旭日图等等),并且具有可扩展的用户界面,可以全方位的配置和管理 ElasticSearch

  • Logstash:Logstash是动态数据收集管道 ,拥有可扩展的插件生态系统,能够动态地采集、转换和传输数据,并且不受格式或复杂度的影响;Logstash 能够与ElasticSearch产生强大的协同作用

  • Beats:负责采集数据的组件,Beats是一个面向轻量型采集器 的平台,这些采集器可以从边缘机器向Logstash、ElasticSearch发送数据,它是由Go语言进行开发的,运行效率方面比较快。从下图中可以看出,不同Beats的套件是针对不同的数据源

Elastic Stack 的发展历程

Elastic Stack 主要体现在日志收集系统的演变上

一个典型的日志系统主要包括以下几点

  • 收集 - 能够采集多种来源的日志数
  • 传输 - 能够稳定的把日志数据解析过滤并传输到存储系统
  • 存储 - 持久化日志数据
  • 分析 - UI 分析支持
  • 警告 - 能够提供错误报告,监控机制

1)第一阶段,Beats 采集,ES 存储,Kinaba 展示

image.png

2)第二阶段引入了 Logstash

image.png

第二阶段引入 Logstash 后,相比第一阶段新增了很多的优势

  1. Logstash具有基于磁盘的自适应缓冲系统,该系统将吸收传入的吞吐量,从而减轻背压
  2. 增加了更多的数据源,可以从其他数据源(例如数据库,S3或消息传递队列)中提取数据
  3. 可以将数据发往更多的目的地
  4. 使用条件数据流逻辑组成更复杂的处理管道

beats结合logstash带来的优势

  • 水平可扩展性,高可用性和可变负载处理;Beats 和 logstash 可以实现节点之间的负载均衡,多个Logstash 可以实现 Logstash 的高可用
  • 消息持久性与至少一次交付保证;使用 Beats 进行日志收集时,可以保证至少一次交付
  • 具有身份验证和有线加密的端到端安全传输;从 Beats 到 Logstash 以及从 Logstash 到Elasticsearch 的传输都可以使用加密方式传递
  • 增加更多数据源,如下图显示

image.png

3)第三阶段在 Beats 和 Logstash 中间添加了消息队列

image.png

中间件的加入有以下几点好处

  1. 降低对日志所在机器的影响,这些机器上一般都部署着反向代理或应用服务,本身负载就很重了,所以尽可能的在这些机器上少做
  2. 如果有很多台机器需要做日志收集,那么让每台机器都向Elasticsearch持续写入数据,必然会对Elasticsearch造成压力,因此需要对数据进行缓冲,同时,这样的缓冲也可以一定程度的保护数据不丢失
  3. 将日志数据的格式化与处理放到Indexer中统一做,可以在一处修改代码、部署,避免需要到多台机器上去修改配置

官方分享的 Elastic Stack 最佳实践

日志收集系统

image.png

image.png

Metric 收集和 APM 性能监控

image.png

多数据中心方案

通过冗余实现高可用

image.png

两个数据采集中心(比如采集两个工厂的数据),采集数据后的汇聚

image.png

数据分散,跨集群的搜索

image.png

猜你喜欢

转载自juejin.im/post/7085632317233823757