前言

为什么学习ElasticSearch?

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

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

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

​ ElasticSearch是最受欢迎的企业级搜索引擎。

介绍

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

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

  • Wikipedia 使用 Elasticsearch 提供带有高亮片段的全文搜索,还有 search-as-you-type 和 did-you-mean 的建议。
  • 卫报 使用 Elasticsearch 将网络社交数据结合到访客日志中,为它的编辑们提供公众对于新文章的实时反馈。
  • Stack Overflow 将地理位置查询融入全文检索中去,并且使用 more-like-this 接口去查找相关的问题和回答。
  • GitHub 使用 Elasticsearch 对1300亿行代码进行查询。

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

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

为什么不是直接使用Lucene

​ 由于ElasticSearch是基于Lucene的开发的,但是为什么不直接使用Lucene?

​ Lucene 可以说是当时当下最先进、高性能、全功能的搜索引擎库。但是 Lucene 仅仅只是一个库。为了充分发挥其功能,你需要使用 Java 并将 Lucene 直接集成到应用程序中。 但其内部非常复杂需要获得信息检索学位才能了解其工作原理。

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

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

  • 一个分布式的实时文档存储,每个字段 可以被索引与搜索
  • 一个分布式实时分析搜索引擎
  • 能胜任上百个服务节点的扩展,并支持 PB 级别的结构化或者非结构化数据

ElasticSearch的主要功能及应用场景

  • 主要功能:

1)海量数据的分布式存储以及集群管理,达到了服务与数据的高可用以及水平扩展;

2)近实时搜索,性能卓越。对结构化、全文、地理位置等类型数据的处理;

3)海量数据的近实时分析(聚合功能)

  • 应用场景:

1)网站搜索、垂直搜索、代码搜索;

2)日志管理与分析、安全指标监控、应用性能监控、Web抓取舆情分析;

ElasticSearch的基础概念

Near Realtime(NRT) 近实时。数据提交索引后,立马就可以搜索到。

Cluster 集群,一个集群由一个唯一的名字标识,默认为“elasticsearch”。集群名称非常重要,具有相同集群名的节点才会组成一个集群。集群名称可以在配置文件中指定。

Node 节点:存储集群的数据,参与集群的索引和搜索功能。像集群有名字,节点也有自己的名称,默认在启动时会以一个随机的UUID的前七个字符作为节点的名字,你可以为其指定任意的名字。通过集群名在网络中发现同伴组成集群。一个节点也可是集群。

Index 索引: 一个索引是一个文档的集合(等同于solr中的集合)。每个索引有唯一的名字,通过这个名字来操作它。一个集群中可以有任意多个索引。

Type 类型:指在一个索引中,可以索引不同类型的文档,如用户数据、博客数据。从6.0.0 版本起已废弃,一个索引中只存放一类数据。

Document 文档:被索引的一条数据,索引的基本信息单元,以JSON格式来表示。

Shard 分片:在创建一个索引时可以指定分成多少个分片来存储。每个分片本身也是一个功能完善且独立的“索引”,可以被放置在集群的任意节点上。

Replication 备份: 一个分片可以有多个备份(副本)

普通数据库对比

Elastic Stack生态(日志收集)

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

(1)收集:能够采集多种来源的日志数据

(2)传输:能够稳定的把日志数据解析过滤并传输到存储系统

(3)存储:存储日志数据

(4)分析:支持 UI 分析

(5)警告:能够提供错误报告,监控机制

ELK演变:

1) beats+elasticsearch+kibana

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

2) Beats + Logstash + ElasticSearch + Kibana

​ Beats采集数据后,通过Logstash传输转换,存储在ES中,有Kibana可视化的展示。

引入logstash带来的好处如下:

(1)Logstash具有基于磁盘的自适应缓冲系统,该系统将吸收传入的吞吐量,从而减轻背压。

(2)从其他数据源(例如数据库,S3或消息传递队列)中提取。

(3)将数据发送到多个目的地,例如S3,HDFS或写入文件。

(4)使用条件数据流逻辑组成更复杂的处理管道。

beats结合logstash带来的优势

**(1)水平可扩展性,高可用性和可变负载处理。**beats和logstash可以实现节点之间的负载均衡,多个logstash可以实现logstash的高可用

**(2)消息持久性与至少一次交付保证。**使用beats或Winlogbeat进行日志收集时,可以保证至少一次交付。从Filebeat或Winlogbeat到Logstash以及从Logstash到Elasticsearch的两种通信协议都是同步的,并且支持确认。Logstash持久队列提供跨节点故障的保护。对于Logstash中的磁盘级弹性,确保磁盘冗余非常重要。

**(3)具有身份验证和有线加密的端到端安全传输。**从Beats到Logstash以及从 Logstash到Elasticsearch的传输都可以使用加密方式传递 。与Elasticsearch进行通讯时,有很多安全选项,包括基本身份验证,TLS,PKI,LDAP,AD和其他自定义领域

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

3)beats+MQ+logstash+elasticsearch+kibana

​ Beats采集数据后,加入的消息队列中可以进行流量肖峰,再通过Logstash传输转换,存储在ES中,有Kibana可视化的展示。

​ 当然也可以在beats和logstash中间添加一些组件redis、kafka、RabbitMQ等,添加中间件将会有如下好处:

(1)**降低对日志所在机器的影响,**这些机器上一般都部署着反向代理或应用服务,本身负载就很重了,所以尽可能的在这些机器上少做事;

(2)**降低日志写入压力。**如果有很多台机器需要做日志收集,那么让每台机器都向Elasticsearch持续写入数据,必然会对Elasticsearch造成压力,因此需要对数据进行缓冲,同时,这样的缓冲也可以一定程度的保护数据不丢失;

(3)将日志数据的格式化处理,独立出来,避免需要到多台机器上去修改配置;


Beats

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

Logstash

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

它具有如下特性:

1)实时解析和转换数据;

2)可扩展,具有200多个插件;

3)可靠性、安全性。Logstash会通过持久化队列来保证至少将运行中的事件送达一次,同时将数据进行传输加密;

4)监控;

ElasticSearch

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

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

1)首先用户将数据提交到ElasticSearch数据库中;

2)再通过分词控制器将对应的语句分词;

3)将分词结果及其权重一并存入,以备用户在搜索数据时,根据权重将结果排名和打分,将返回结果呈现给用户;

Kibana

​ **Kibana实现数据可视化,其作用就是在ElasticSearch中进行民航。Kibana能够以图表的形式呈现数据,并且具有可扩展的用户界面,可以全方位的配置和管理ElasticSearch。**Kibana最早的时候是基于Logstash创建的工具,后被Elastic公司在2013年收购。

1)Kibana可以提供各种可视化的图表;

2)可以通过机器学习的技术,对异常情况进行检测,用于提前发现可疑问题;

安装注意事项

1、平台确认好。确认好安装的平台,以备后续的安装。

2、安装Java。安装之前,需要安装最新版的JDK版本。

3、安装成功之后,需要新增一个非Root用户,并授予相关文件操作权限以及配置相关的信息等。(ElasticSearch5及以上版本,基于安全考虑,强制规定不能以root身份运行)。

3-1)修改data和log路径。
vi /opt/elasticsearch-7.12.0/config/elasticsearch.yml

​ 3-2)修改Linux系统的限制配置。

**1)修改系统中允许应用最多创建多少文件等的限制权限。**Linux默认来说,一般限制应用最多创建的文件是65535个。但是ES至少需要65536的文件创建权限。

**2)修改系统中允许用户启动的进程开启多少个线程。**默认的Linux限制root用户开启的进程可以开启任意数量的线程,其他用户开启的进程可以开启1024个线程。必须修改限制数为4096+。因为ES至少需要4096的线程池预备。ES在5.x版本之后,强制要求在linux中不能使用root用户启动ES进程。所以必须使用其他用户启动ES进程才可以。

**3)Linux低版本内核为线程分配的内存是128K。**4.x版本的内核分配的内存更大。如果虚拟机的内存是1G,最多只能开启3000+个线程数。所以至少为虚拟机分配1.5G以上的内存。

3-3)配置密码访问。
使用基本许可证时,默认情况下禁用Elasticsearch安全功能。由于我测试环境是放在公网上的,所以需要设置下密码访问。

总结

ES是一个基于RESTful web接口并且构建在Apache Lucene之上的开源分布式搜索引擎。同时ES还是一个分布式文档数据库,其中每个字段均可被索引,而且每个字段的数据均可被搜索,能够横向扩展至数以百计的服务器存储以及处理PB级的数据。

另外可以在极短的时间内存储、搜索和分析大量的数据。通常作为具有复杂搜索场景情况下的核心发动机。所以也常用于做日志追踪分析。

​ ES就是为高可用和可扩展而生的。一方面可以通过升级硬件来完成系统扩展,称为垂直或向上扩展(Vertical Scale/Scaling Up)。另一方面,增加更多的服务器来完成系统扩展,称为水平扩展或者向外扩展(Horizontal Scale/Scaling Out)。

​ 尽管ES能够利用更强劲的硬件,但是垂直扩展毕竟还是有它的极限。**真正的可扩展性来自于水平扩展,通过向集群中添加更多的节点来分担负载,增加可靠性。ES天生就是分布式的,它知道如何管理多个节点来完成扩展和实现高可用性。**意味应用不需要做任何的改动。

ElasticSearch(ES)介绍相关推荐

  1. Elasticsearch的介绍 以及使用python操作es详细步骤

    一. 什么是 Elasticsearch 想查数据就免不了搜索,搜索就离不开搜索引擎,百度.谷歌都是一个非常庞大复杂的搜索引擎,他们几乎索引了互联网上开放的所有网页和数据.然而对于我们自己的业务数据来 ...

  2. 2021年大数据ELK(二):Elasticsearch简单介绍

    全网最详细的大数据ELK文章系列,强烈建议收藏加关注! 新文章都已经列出历史文章目录,帮助大家回顾前面的知识重点. 目录 系列历史文章 一.Elasticsearch简介 1.介绍 2.创始人 二.E ...

  3. 搜索引擎ElasticSearchV5.4.2系列一之ES介绍

    相关博文: 搜索引擎ElasticSearchV5.4.2系列一之ES介绍 搜索引擎ElasticSearchV5.4.2系列二之ElasticSearchV5.4.2+kibanaV5.4.2+x- ...

  4. Elasticsearch 基本介绍及其与 Python 的对接实现

    什么是 Elasticsearch 想查数据就免不了搜索,搜索就离不开搜索引擎,百度.谷歌都是一个非常庞大复杂的搜索引擎,他们几乎索引了互联网上开放的所有网页和数据.然而对于我们自己的业务数据来说,肯 ...

  5. Linux / Windows系统中安装最新版 ElasticSearch (es)搜索引擎 超详细图文教程【一看就懂】

    "You Know, for Search"  相信来到这里的朋友们已经对ElasticSearch(es)有了一个大致的了解.关于Elasticsearch的介绍就不在此做过多赘 ...

  6. ElasticSearch(ES)

    文章目录 备注.必看 ElasticSearch 和 Solr 介绍,对比 ElasticSearch 7.8. 官网 基本概念 Cluster(集群) 与 Node(节点) Index -索引 索引 ...

  7. Elasticsearch入门介绍

    ES是一个高扩展的.开源的.全文检索的搜索引擎,它提供了近实时的索引.搜索.分析功能. ES文档翻译与总结参考:ES知识汇总 应用场景 1 它提供了强大的搜索功能,可以实现类似百度.谷歌等搜索. 2 ...

  8. ES搜索引擎之ES介绍,安装以及辅助插件Kibana的安装

    文章目录 ES搜索引擎之ES介绍,安装以及辅助插件Kibana的安装 ElasticSearch介绍 1.1为什么会有ElasticSearch搜索引擎 1.2ES的介绍 1.3什么是倒排索引 Ela ...

  9. [Elasticsearch] es 6.6 编译报错 SSL peer shut down incorrectly

    1.概述 前提:[Elasticsearch] es 6.6 编译报错 java.net.ConnectException: Operation timed out Mac 编译es 6.8 报错 [ ...

  10. ElasticSearch (ES)学习之路(二)Win10安装ES,可视化界面,Kibanna

    ElasticSearch (ES)学习之路(二)Win10安装ES,可视化界面,Kibanna 我前一段时间学习的时候ES 还是7.6.x 现在看ES 官网已经到了7.8.X了,迭代维护的速度还是挺 ...

最新文章

  1. python代码大全表解释-python实现顺序表的简单代码
  2. 计算机二级日期格式,09年计算机二级辅导:指定格式的日期字符串转化成java.util.Date类型日期对象...
  3. Mac上配置 Sublime Text 使其使用 Python3
  4. 一个关于导出excel模板的实例
  5. 给出一个正整数 nnn,请你计算从 111 到 nnn 的所有正整数中,有多少个数字的各位数和是 999,Java
  6. 搜索 由浅入深 之一 水题
  7. android 中文参数,(原)Android: 启动另外的APP及传递参数
  8. 【Python】Windows下Python3虚拟环境搭建
  9. 怎么让php文件请求一次连接,php 如何锁定接口,让一个接口,同一时间只处理同一人的一次请求?...
  10. (转)学习directx遇到的问题
  11. linux充电时熄屏时间,充电时玩手机会损害电池吗
  12. js将数值格式化成金额形式
  13. Eclipse使用问题
  14. 记自己的第一个完整的java web项目
  15. 【软件工程】重要知识点
  16. 站斧超级浏览器风控系统助力Lazada商家安全管理
  17. R语言之dpqr概率函数
  18. 华为钱包扫码云闪付_Huawei Pay开通与使用银联云闪付教程
  19. 计算机网络中常见的名词缩写
  20. 网站怎么做SEO优化操作?

热门文章

  1. java内部类之成员内部类、局部内部类和匿名内部类
  2. 软阈值(Soft Thresholding)函数
  3. 我决不黑微软。。也不知你说的对不对?大家来点有思想高度的分析
  4. 用Python写表白程序,给另一半一个惊喜
  5. 看了这篇你还不懂BERT,那你就过来打死我吧
  6. 如何给PDF文件添加自定义图章的方法
  7. 给你的笔记本电脑装上高性能独立显卡:外接显卡盒子选购指南
  8. 共享网站服务器的优缺点,网站服务器的带宽如何选择?独享带宽还是共享带宽?...
  9. NginxKeepalived 实现高可用
  10. 从蓝海到红海 家庭医生迎来社会资本入局时代