版权声明:本文为博主原创文章,转载请注明出处:https://twocups.cn/index.php/2021/02/21/25/
Elastic Stack 官方网站:https://www.elastic.co/cn/elastic-stack
Elastic Stack 是什么?
Elastic Stack 是公司 Elastic 旗下一系列产品的合称,其中包括 Elasticsearch、 Logstash、Kibana、Beats,也被称为 ELK Stack。
其中,Elastic 是公司的名字,那么 ELK 又是什么呢?“ELK”是三个开源项目(旗下产品)的首字母缩写,这三个项目分别是:E – Elasticsearch、L – Logstash 和 K – Kibana。简单来说,Elasticsearch 是一个搜索和分析引擎,是一种特殊的“存储库”;Logstash 是服务器端数据处理通道,负责采集数据、转换数据、发送数据;Kibana 是一个让用户在 Elasticsearch 中使用图形和图标的数据可视化界面。
一切都起源于 Elasticsearch
Elasticsearch 是一个分布式、高扩展、高实时的搜索与数据分析引擎,它也是一个“存储库”。它能很方便的使大量数据具有搜索、分析和探索的能力。充分利用 Elasticsearch 的水平伸缩性,能使数据在生产环境变得更有价值。换句话说,它可以让原本杂乱无章的数据变得井井有条,方便之后的数据分析和挖掘。Elasticsearch 的实现原理主要分为以下几个步骤,首先用户将数据提交到 Elasticsearch 数据库中,再通过分词控制器去将对应的语句分词,将其权重和分词结果一并存入数据,当用户搜索数据时候,再根据权重将结果排名、打分,再将返回结果呈现给用户。如果不太能理解的话,就想一想你用 Google 搜索去搜一句话的场景。现在 Google 背后用的是不是 Elasticsearch 或者它的改版我没查到,但我听说 Google 的搜索引擎最早是李彦宏前辈的算法?
引入 Logstash 和 Kibana
Elasticsearch 的核心是搜索引擎,所以用户开始将其用于日志用例,并希望能够轻松地对日志进行采集和可视化。但光光有一个搜索引擎是不够方便的,所以强大的采集管道 Logstash 和灵活的可视化工具 Kibana 被引入。它们三兄弟也就组成了我们熟知的“ELK”。
Beats 又加入其中
现在搜索引擎有了,消息传输管道有了,存储库也有了,但还缺了什么呢?对了,缺少 Elasticsearch 存储库中数据的来源。Elasticsearch 一般被用来处理日志用例,那么是谁的日志?Elasticsearch 怎么采集到它们的日志呢?所以有了 Beats。Beats 是一系列轻量型的单一功能数据采集器,可以采集 Linux、Nginx 之类的日志,并将它们直接发送给 Elasticsearch 或者通过 Logstash 发送给 Elasticsearch 。
Elastic Stack 这个名字应运而生
有了 Beats 的加入,ELK 这个名称就不能继续叫了,毕竟多了一个项目。虽然当初有过 ELKB 这种继续沿用首字母缩写的方案,但是这个时代技术发展太快了,以后保不齐还有什么项目要出现,所以就统一叫“Elastic Stack”。
ELK = Elasticsearch + Logstash + Kibana, 随着 Beats 的加入,原本的 ELK 体系变为了 Elastic Stack, Elastic Stack = Elasticsearch + Logstash + Kibana + Beats。
Elastic Stack 的由来
1998年,Google 公司在美国硅谷成立,它以做搜索引擎起家。
后来,一位名叫 Doug Cutting 的美国工程师,也对搜素引擎非常感兴趣,于是他开发了一个用于本文搜索的函数库,命名为 Lucene。Lucene 使用 Java 写的,目标是为各种中小型应用软件加入全文检索功能。Lucene 被发布在 Doug Cutting 的个人网站和一个开源软件网站 SourceForge,并且由于开源又好用,所以这个项目广受好评。直到2001年底,Lucene 成为 Apache 软件基金会 Jakarta 的一个子项目。
2004年,Doug Cutting 在 Lucene 的基础上,和 Apache 开源伙伴 Mike Cafarella 合作,开发了一款可以替代当时主流搜索的开源搜索引擎,命名为 Nutch。Nutch 是一个建立在 Lucene 核心之上的网页搜索应用程序,它在 Lucene 的基础上加了网络爬虫和一些网页相关的功能,它将搜索引擎的搜索范围从原来的简单的站内搜索扩展为全球的网络搜索。
但是,Google 和 Nutch 都遇到了用户数据量(搜索对象体积)不断增大的问题,这也是大数据的雏形。为此,2003年 Google 发表了一篇技术学术论文,公开介绍了自己的谷歌文件系统 GFS(Google File System),这是 Google 为了存储海量搜索数据而自己设计的专用文件系统。2004年,Doug Cutting 基于 Google 的 GFS 论文,实现了分布式文件存储系统,命名为 NDFS(Nutch Distributed File System)。
2004年同年,Google 又发表了一篇技术学术论文,介绍了自己的 MapReduce 编程模型,该编程模型用于大规模数据集(大于1TB)的并行分析运算。而在次年2005年,Doug Cutting 又在搜索引擎 Nutch 实现了该功能 。
2006年,Yahoo(雅虎)公司招安了 Doug Cutting,并跟随雅虎一起自研搜索引擎。加盟雅虎后,Doug Cutting 将 NDFS 和 MapReduce 进行了改造升级,并重新命名为 Hadoop。同时,NDFS 也改名为 HDFS(Hadoop Distributed File System)。
2006年同年,Google 又介绍了自己的 分布式数据存储系统 BigTable,这是一种用来处理海量数据的非关系型数据库。之后,Doug Cutting 又在 Hadoop 系统里面引入了 BigTable,并命名为 HBase。
2008年1月,Hadoop 成功上位,正式成为 Apache 基金会的顶级项目。同年2月,Yahoo 宣布建成了一个拥有一万个内核的 Hadoop 集群,并将自己的搜索引擎产品部署在上面。同年7月,Hadoop 打破世界纪录,成为最快排序1TB数据的系统,用时209秒。
这就是大名鼎鼎的大数据框架系统 Hadoop 的由来。而 Doug Cutting,他除了是 Lucene 的创始人之外,还是 Hadoop 之父。
其实,到这里为止已经有点扯远了,我们来梳理一下 Doug Cutting 的项目开发历程。
用于本文搜索的函数库 Lucene -> 可用于全球搜索的搜索引擎 Nutch -> Nutch 实现了 NDFS(仿照GFS) -> Nutch 实现了 MapReduce -> NDFS 和 MapReduce 升级改造,合并为 Hadoop -> Hadoop 实现了 HBase(仿照BigTable)
而我们想说的,其实只是 Lucene。
严格意义上给来说,Lucene 是一个全文检索引擎工具包,是一个 jar 包。它不是一个完整的全文搜索引擎,也不包含搜索引擎系统,而是一个全文检索引擎的架构,它提供了完整的查询引擎和索引引擎、部分文本分析引擎。通俗点说,Lucene 包含索引结构(类似数据库)、读写索引的工具(类似 CRUD)、常用工具类(比如排序和过滤或者模糊搜索之类的搜索规则)。
那么我们终于来到主题了,Elasticsearch 是基于工具包 Lucene 做了一些封装和增强的搜索与数据分析引擎。
时间回到2004年,有一个叫 Shay Banon 的待业工程师跟随他的新婚妻子来到伦敦。她的妻子想在伦敦学习做一名厨师,而 Shay Banon 则想为自己的妻子开发一个方便搜索菜谱的应用,于是他开始使用 Lucene 的一个早期版本。但是尝试之后,他感受到了直接使用 Lucene 开发程序的各种暴击和痛苦,于是他在 Lucene 之上,封装了一个叫作 Compass 的程序框架并且把它开源了。后来 Shay Banon 找到了一份跟高性能和分布式相关的工作。他在工作中渐渐发现,他越来越需要一个易用的高性能、实时、分布式搜索服务,于是他决定重写 Compass,将它从一个库打造成了一个独立的服务,并将其改名为 Elasticsearch。
Shay Banon 在2010年2月发布了 Elasticsearch 的第一个版本,并于2012年成立了 Elasticsearch 公司。2015年3月,Elasticsearch 公司更名为我们现在熟知的 Elastic。
而 Logstash 项目诞生于2009年8月,其作者为世界著名的运维工程师 Jordan Sissel,这位工程师还发布过非常棒的软件打包工具 fpm。直到2013年,Logstash 被当时的 Elasticsearch 公司收购。
Kibana 是基于 Logstash 的工具,2013年被 Elasticsearch 公司收购。
Beats 是采用 go 语言开发的一系列轻量级数据采集工具。Elastic 官方支持五种 Beats,但是开源的力量早就创造出成百上千的 Beats。
下篇继续
【Elastic Stack系列】第三章:实际部署(一) Elasticsearch篇