ElasticSearch(ES)介绍

这篇具有很好参考价值的文章主要介绍了ElasticSearch(ES)介绍。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

为什么学习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 备份: 一个分片可以有多个备份(副本)

普通数据库对比

ElasticSearch(ES)介绍

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天生就是分布式的,它知道如何管理多个节点来完成扩展和实现高可用性。**意味应用不需要做任何的改动。文章来源地址https://www.toymoban.com/news/detail-491064.html

到了这里,关于ElasticSearch(ES)介绍的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 鸿蒙开发|鸿蒙系统的介绍(为什么要学习鸿蒙开发|鸿蒙系统的官方定义|鸿蒙和安卓、ios的对比)

    鸿蒙开发学习是一项探索性的工作,旨在开发一个全场景分布式操作系统,覆盖所有设备,让消费者能够更方便、更直观地使用各种设备。 鸿蒙系统定位为面向未来、面向全场景(移动办公、运动健康、社交通信、媒体娱乐等)的分布式操作系统。它通过分布式技术,将各种

    2024年01月15日
    浏览(31)
  • 为什么说es是近实时搜索

    首先要理解es的存储结构: 一个index的数据,分散在多个shard(分片),一个分片又有很多segment(段),es是数据不可变模型,更新数据只是新增一个版本。 es是怎么写数据的? 每次写的时候,首先会写到es的内存(每个分片的内存),这时写的数据是不可搜索的;然后每个分片默认每

    2024年02月11日
    浏览(40)
  • Elasticsearch为什么快?

    概括的说,一个优秀的搜索引擎的设计,至少应该具备以下几点要求: 高效的压缩算法 快速的编码和解码算法 合理的数据结构 通用最小化算法 结合以上几点,后面我将通过一个案例来讲解,倒排索引的基本原理是什么。在了解“倒排索引”之前,我们先来看一下何为“索

    2024年02月04日
    浏览(31)
  • ES forceMerge 强制段合并为什么会提升检索性能?

      根据以前的测试,forceMerge段合并,将段的个数合并成一个。带来了将近一倍的性能提升,测试过程文档(请参考我的另外一篇文章):ES优化实战- forceMerge搜索提升测试报告_es forcemerge_水的精神的博客-CSDN博客   注意,这次测试,只是这对一个长文本字段(就像一篇文章)

    2024年02月04日
    浏览(31)
  • Redis—Redis介绍(是什么/为什么快/为什么做MySQL缓存等)

    一、Redis是什么 Redis 是一种 基于内存的数据库 ,对数据的读写操作都是在内存中完成,因此读写速度非常快,常用于 缓存,消息队列、分布式锁等场景 。         Redis 提供了多种数据类型来支持不同的业务场景,比如 String(字符串)、Hash(哈希)、 List (列表)、Set(集合)、

    2024年02月10日
    浏览(52)
  • Elasticsearch:索引状态是红色还是黄色?为什么?

    在我之前文章 “Elasticsearch:如何调试集群状态 - 定位错误信息” 中,我有详细介绍如何调试集群状态。在今天的文章中,我将详细介绍如何故障排除和修复索引状态。 Elasticsearch 是一个伟大而强大的系统,特别是创建一个可扩展性极强的分布式数据存储,并自动跟踪、管理

    2023年04月09日
    浏览(30)
  • Elasticsearch:什么是向量和向量存储数据库,我们为什么关心?

    Elasticsearch 从 7.3 版本开始支持向量搜索。从 8.0 开始支持带有 HNSW 的 ANN 向量搜索。目前 Elasticsearch 已经是全球下载量最多的向量数据库。它允许使用密集向量和向量比较来搜索文档。 向量搜索在人工智能和机器学习领域有许多重要的应用。 有效存储和检索向量的数据库对于

    2024年02月08日
    浏览(44)
  • Elasticsearch 为什么会产生文档版本冲突?如何避免?

    先让大家直观的看到 Elasticsearch 文档版本冲突。 1.1 场景1:create 场景 1.2 场景2:批量更新场景模拟 模拟脚本1:循环写入数据 index.sh。 模拟脚本2:循环update_by_query 批量更新数据 update.sh。 由于:写入脚本 index.sh 比更新脚本 update.sh (执行一次,休眠1秒)执行要快,所以更新

    2023年04月08日
    浏览(32)
  • 为什么选择elasticsearch分布式搜索引擎

    elasticsearch是一款非常强大的开源搜索引擎,具备非常多强大功能,可以帮助我们从海量数据中快速找到需要的内容 例如: 在CSDN上搜索代码 在电商网站搜索商品 在百度搜索答案 elasticsearch结合kibana、Logstash、Beats,也就是elastic stack(ELK)。被广泛应用在日志数据分析、实时监

    2024年02月12日
    浏览(39)
  • 为什么Elasticsearch7.x把type给干掉了?

    一、介绍 ES7之前是有type的,属于index下,一个index可以有不同的type,ES7开始就把type这个显示概念给删除了,统一换成了_doc来表示type。也就是ES7开始一个index只能有一个type,而且这个type还是默认的_doc。 二、type的底层存储 1、概念讲解 什么是类型(type)? 从Elasticsearch的第一个

    2024年02月06日
    浏览(27)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包