文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

边学边实战系列(一):ElasticSearch 基础概念、生态和应用场景

admin

admin

2024-04-02 17:21

关注

在当今这样的就业大背景下,卷是肯定的,强大自己也是必须的。所以,学习不能停,必须一直卷下去。所以,从今天开始,让我们一起卷下一个知识体系的学习之旅:搜索引擎 ElasticSearch 。希望大家能够从中收获多多!


边学边实战系列之搜索引擎 ElasticSearch !

为什么需要学习 ElasticSearch

根据 DB Engine 的排名显示,ElasticSearch 是最受欢迎的企业级搜索引擎。下图红色勾选的是我们前面的系列详解的,除此之外你可以看到搜索库ElasticSearch在前十名内:

所以为什么要学习 ElasticSearch 呢?

1、在当前软件行业中,搜索是一个软件系统或平台的基本功能, 学习ElasticSearch就可以为相应的软件打造出良好的搜索体验。

2、其次,ElasticSearch具备非常强的大数据分析能力。虽然Hadoop也可以做大数据分析,但是ElasticSearch的分析能力非常高,具备Hadoop不具备的能力。比如有时候用Hadoop分析一个结果,可能等待的时间比较长。

3、ElasticSearch可以很方便的进行使用,可以将其安装在个人的笔记本电脑,也可以在生产环境中,将其进行水平扩展。

4、国内比较大的互联网公司都在使用,比如小米、滴滴、携程等公司。另外,在腾讯云、阿里云的云平台上,也都有相应的ElasticSearch云产品可以使用。

5、在当今大数据时代,掌握近实时的搜索和分析能力,才能掌握核心竞争力,洞见未来。

更多关于 ElasticSearch 数据库的学习文章,请参阅:NoSQL 数据库之 ElasticSearch ,本系列持续更新中。

什么是ElasticSearch

ElasticSearch是一款非常强大的、基于Lucene的开源搜索及分析引擎;它是一个实时的分布式搜索分析引擎,它能让你以前所未有的速度和规模,去探索你的数据。

它被用作全文检索、结构化搜索、分析以及这三个功能的组合:

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

ElasticSearch是基于Restful WebApi,使用Java语言开发的搜索引擎库类,并作为Apache许可条款下的开放源码发布,是当前流行的企业级搜索引擎。其客户端在Java、C#、PHP、Python等许多语言中都是可用的。

所以,ElasticSearch具备两个优势:

ElasticSearch的由来

ElasticSearch背后的小故事。

许多年前,一个刚结婚的名叫 Shay Banon 的失业开发者,跟着他的妻子去了伦敦,他的妻子在那里学习厨师。在寻找一个赚钱的工作的时候,为了给他的妻子做一个食谱搜索引擎,他开始使用 Lucene 的一个早期版本。

直接使用 Lucene 是很难的,因此 Shay 开始做一个抽象层,Java 开发者使用它可以很简单的给他们的程序添加搜索功能。他发布了他的第一个开源项目 Compass。

后来 Shay 获得了一份工作,主要是高性能,分布式环境下的内存数据网格。这个对于高性能,实时,分布式搜索引擎的需求尤为突出, 他决定重写 Compass,把它变为一个独立的服务并取名 Elasticsearch。

第一个公开版本在2010年2月发布,从此以后,Elasticsearch 已经成为了 Github 上最活跃的项目之一,他拥有超过300名 contributors(目前736名 contributors )。一家公司已经开始围绕 Elasticsearch 提供商业服务,并开发新的特性,但是,Elasticsearch 将永远开源并对所有人可用。

据说,Shay 的妻子还在等着她的食谱搜索引擎…。

为什么不是直接使用Lucene

ElasticSearch是基于Lucene的,那么为什么不是直接使用Lucene呢?

Lucene 可以说是当下最先进、高性能、全功能的搜索引擎库。

但是 Lucene 仅仅只是一个库。为了充分发挥其功能,你需要使用 Java 并将 Lucene 直接集成到应用程序中。更糟糕的是,您可能需要获得信息检索学位才能了解其工作原理。Lucene 非常 复杂。

Elasticsearch 也是使用 Java 编写的,它的内部使用 Lucene 做索引与搜索,但是它的目的是使全文检索变得简单,通过隐藏 Lucene 的复杂性,取而代之的提供一套简单一致的 RESTful API。

然而,Elasticsearch 不仅仅是 Lucene,并且也不仅仅只是一个全文搜索引擎。它可以被下面这样准确的形容:

ElasticSearch的主要功能及应用场景

我们在哪些场景下可以使用ES呢?

主要功能

应用场景

ElasticSearch的基础概念

我们还需对比结构化数据库,看看ES的基础概念,为我们后面学习作铺垫。

为了方便理解,作一个ES和数据库的对比

下面对一些基础概念进行一个详细的说明,帮助大家更好的去理解。

文档

ElasticSearch是面向文档的,文档是所有可搜索数据的最小单位。例如:

在ElasticSearch中,文档会被序列化成Json格式:

每个文档都有一个唯一的ID(Unique ID)

我们可以将文档理解成关系型数据库中的一条数据记录,一条记录包含了一系列的字段。

Json文档的格式不需要预先定义

每一个文档中都包含有一份元数据,元数据的作用主要是用来标注文档的相关信息,如:

索引(Index)

索引指的就是一类文档的集合,相当于文档的容器。

索引的Mapping与Setting

Mapping定义文档字段的类型;

Setting定义不同的数据分布;

索引的含义

一般说“索引文档到ElasticSearch的索引中”,前面的索引指的是一个动词的含义,也就是保存一个文档到ElasticSearch中。后面的索引是指在ElasticSearch集群中,可以创建很多个不同的索引;

索引分为:B树索引和倒排索引,而倒排索引在ElasticSearch中是非常重要的;

ElasticSearch与RDBMS的代入理解与类比如下

两者相对比,若对数据进行全文检索,以及进行算分时,ElasticSearch更加合适;当涉及的数据事务比较高时,那RDBMS更加合适。在实际生产中,一般是两者进行结合使用。

集群

ElasticSearch集群实际上是一个分布式系统,而分布式系统需要具备两个特性:

ElasticSearch的集群通过不同的名字来进行区分,默认名字“elasticsearch”;可以通过配置文件修改或者命令行修改:-E cluster.name=test一个集群中可以有一个或者多个节点。

节点

节点是什么?

每个节点都有名字,可以通过配置文件进行配置,也可以通过命令行进行指定,如:**-E node.name=node1**

每个节点在启动之后,会被分配一个UID,保存在data目录下;

Master-Eligible【有资格、胜任者】 Node与Master Node的说明:

Data Node与Coordinating【协调、整合】 Node的说明:

Hot Node(热节点)与Warm Node(冷节点)的说明:

Machine Learning Node:负责机器学习的节点,常用来做异常检测;

配置节点类型

分片

Primary Shard(主分片)

可以解决数据水平扩展的问题,通过主分片,可以将数据分布到集群内的所有节点之上。

一个主分片是一个运行的Lucene的实例;

注意:

主分片数是在索引创建时指定,后续不允许修改,除非Reindex;

Replica Shard(副本)

可以解决数据高可用的问题,它是主分片的拷贝。

分片的设定

对于生产环境中分片的设定,需要提前做好容量规划,因为主分片数是在索引创建时预先设定的,后续无法修改。

学习ElasticSearch的入手层面

开发层面

运维层面

方案层面

Elastic Stack生态

Beats + Logstash + ElasticSearch + Kibana

如下是我从官方博客中找到图,这张图展示了ELK生态以及基于ELK的场景(最上方)。

由于Elastic X-Pack是面向收费的,所以我们不妨也把X-Pack放进去,看看哪些是由X-Pack带来的,在阅读官网文档时将方便你甄别重点:

更多关于 ElasticSearch 数据库的学习文章,请参阅:NoSQL 数据库之 ElasticSearch ,本系列持续更新中。

Beats

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

Logstash

Logstash是动态数据收集管道,拥有可扩展的插件生态系统,支持从不同来源采集数据,转换数据,并将数据发送到不同的存储库中。其能够与ElasticSearch产生强大的协同作用,后被Elastic公司在2013年收购。

它具有如下特性:

ElasticSearch

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

它的实现原理主要分为以下几个步骤:

ElasticSearch与DB的集成

针对上图,可以分为两种情况:

Kibana

Kibana实现数据可视化,其作用就是在ElasticSearch中进行民航。Kibana能够以图表的形式呈现数据,并且具有可扩展的用户界面,可以全方位的配置和管理ElasticSearch。

Kibana最早的时候是基于Logstash创建的工具,后被Elastic公司在2013年收购。

从日志收集系统看 ES Stack的发展

我们看下ELK技术栈的演化,通常体现在日志收集系统中。

一个典型的日志系统包括:

beats+elasticsearch+kibana

Beats采集数据后,存储在ES中,有Kibana可视化的展示。

beats+logstath+elasticsearch+kibana

该框架是在上面的框架的基础上引入了logstash,引入logstash带来的好处如下:

beats结合logstash带来的优势:

增加更多的数据源 比如:TCP,UDP和HTTP协议是将数据输入Logstash的常用方法。

beats+MQ+logstash+elasticsearch+kibana

在如上的基础上我们可以在beats和logstash中间添加一些组件redis、kafka、RabbitMQ等,添加中间件将会有如下好处:

Elastic Stack最佳实践

我们再看下官方开发成员分享的最佳实践。

日志收集系统

基本的日志系统

增加数据源,和使用MQ

图片

Metric收集和APM性能监控

多数据中心方案

通过冗余实现数据高可用

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

数据分散,跨集群的搜索



阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     676人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     305人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     262人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     366人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     174人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-大数据
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯