首页 > 编程笔记

Elasticsearch介绍(非常详细)

Elasticsearch(简称 ES)是一个开源的、高扩展的、分布式的、提供多用户能力的全文搜索引擎,也是一个基于 Lucene 搜索的服务器,可以近乎实时地存储和搜索数据。

在云计算环境中,Elasticsearch 能够达到数据的实时搜索,而且性能非常稳定,安装与使用也非常便捷。Elasticsearch 在 Java、.NET、PHP、Python、Apache Groovy、Ruby 等程序设计语言中都可以使用。根据 DB-Engines 的排名,Elasticsearch 是非常受欢迎的企业搜索引擎之一。

Elasticsearch 能很方便地用于对大量数据进行搜索和分析,充分利用 Elasticsearch 的水平伸缩性,能够使数据在生产环境中变得更富有价值。

如下图所示,是 Elasticsearch 官网列出的用户,有大量网站和企业在使用 Elasticsearch。


图 1 Elasticsearch的用户

下面列出一些企业的使用场景。

Elasticsearch与Solr比较

当我们谈及 Elasticsearch 的时候,必然会想起 Solr。

下面是 Elasticsearch 与 Solr 的一些区别:

为什么要学习Elasticsearch

学习 Elasticsearch 的好处如下:

Elasticsearch的主要功能及应用场景

Elasticsearch 主要具有如下功能:
Elasticsearch 的主要应用场景如下:
Elasticsearch 是与 Logstash(数据收集和日志解析引擎)和 Kibana(数据分析和可视化平台)一起开发的,这 3 个产品被设计成一个集成的解决方案(ELK),被广泛运用于大数据近实时分析领域,包括日志分析、指标监控、信息安全等。它可以帮助用户搜索海量的结构化数据和非结构化数据,可按照需求创建可视化的报表,还可以通过机器学习自动识别异常状况并告知用户。如下图所示为 ELK 架构流程图。


图 2 ELK架构流程图

其中 Logstash 可以通过相应的配置收集各式各样的数据,比如系统 App 的日志,而且日志格式没有限制(如 TXT、CSV、JSON 等),还可以收集数据库数据(如 MySQL、Oracle、SQL Server 等规范的数据)。用户只需简单地配置就能快速收集这些数据,然后过滤数据,把过滤后的数据存储在 Elasticsearch 中,最后利用界面化工具 Kibana 生成业务需要的各式各样的报表。

如下图所示为利用 Kibana 和 Elasticsearch 生成的数据面板:


图 3 Kibana生成的数据面板

Elasticsearch 除了和 Kibana 结合之外,还可以单独使用来实现数据库存储并且对数据进行全文搜索。下面就来学习与 Elasticsearch 相关的产品以及各种产品相结合的解决方案。

1) Logstash

Logstash 是一个动态数据收集管道,它拥有可扩展的插件生态系统,支持从不同来源收集数据和转换数据(过滤和处理),并将转换后的数据发送到不同的存储库中。Logstash 能够与 Elasticsearch 强力协同工作,2013 年 Logstash 被 Elastic 公司收购。

Logstash 具有如下特点:

2) Elasticsearch

Elasticsearch 可以对数据进行全文搜索、分析和存储,它是基于JSON的分布式数据搜索和数据分析引擎,是专门为实现架构的水平可扩展性、高可靠性和管理便捷性而设计的产品。

Elasticsearch 的实现主要分为以下几个步骤:

3) Kibana

Kibana 可以实现数据可视化,它的作用是在 Elasticsearch 中对数据进行管理和展示。它能够通过图表的形式把数据呈现给用户。

Kibana 具有高可扩展的用户界面,能够全方位地管理 Elasticsearch 中的数据。Kibana 最早的时候是基于 Logstash 创建的工具,具有如下特点:

4) Beats

Beats 是一款轻量级的数据采集器,用Go语言编写,并且集合了多种单一用途的数据采集器。这些采集器安装后可用作轻量型代理服务器,从成千上万台机器向Logstash或Elasticsearch发送数据。

Beats 具有如下几个特征:

5) Beats+Elasticsearch+Kibana结合方案

Beats+Elasticsearch+Kibana 结合方案的架构图如下图所示。


图 4 Beats+Elasticsearch+Kibana结合方案的架构图

Beats 进行数据采集后,将数据存储在 Elasticsearch 中,然后通过 Kibana 进行可视化的展示。

6) Beats+Logstash+Elasticsearch+Kibana结合方案

Beats+Logstash+Elasticsearch+Kibana 结合方案的架构图如图 5 所示。


图 5 Beats+Logstash+Elasticsearch+Kibana结合方案的架构图

该方案在图 4 的框架基础上引入了 Logstash,引入 Logstash 为业务框架带来许多好处,比如 Logstash 具有基于磁盘的自适应缓冲系统,该系统在很大程度上提高了数据读写的吞吐量,还可以从其他数据源中提取数据,并且支持 TCP、UDP、HTTP 等数据传输协议。

Beats 结合 Logstash 带来的优势如下:

7) Beats+MQ+Logstash+Elasticsearch+Kibana结合方案

Beats+MQ+Logstash+Elasticsearch+Kibana 结合方案的架构图如下图所示。


图 6 Beats+MQ+Logstash+Elasticsearch+Kibana结合方案的架构图

用户可以在 Beats 和 Logstash 中间添加诸如 Redis、Kafka、RabbitMQ 等中间件。添加中间件会给系统架构带来许多好处,比如,当有很多台机器需要进行日志收集时,让每台机器都向 Elasticsearch 中持续写入数据,必然会对 Elasticsearch 造成压力,因此需要对数据进行缓冲。使用 Redis、Kafka、RabbitMQ 等中间件可以在数据写入时起到缓冲作用,并且能够在一定程度上保护数据不丢失。

推荐阅读