本文就架构,功能,产品线,概念等方面就ElasticSearch和Splunk做了一下全方位的对比,希望能够大家在制定大数据搜索方案的时候有所帮助。
简介
ElasticSearch (1)(2)是一个基于Lucene的开源搜索服务。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。Elasticsearch是用Java开发的,并作为Apache许可条款下的开放源码发布,是当前流行的企业级搜索引擎。设计用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便。
ELK是ElasticSearch,Logstash,Kibana的缩写,分别提供搜索,数据接入和可视化功能,构成了Elastic的应用栈。
Splunk 是大数据领域第一家在纳斯达克上市公司,Splunk提供一个机器数据的引擎。使用 Splunk 可收集、索引和利用所有应用程序、服务器和设备(物理、虚拟和云中)生成的快速移动型计算机数据 。从一个位置搜索并分析所有实时和历史数据。 使用 Splunk 处理计算机数据,可让您在几分钟内(而不是几个小时或几天)解决问题和调查安全事件。监视您的端对端基础结构,避免服务性能降低或中断。以较低成本满足合规性要求。关联并分析跨越多个系统的复杂事件。获取新层次的运营可见性以及 IT 和业务智能。
根据最新的数据库引擎排名显示,Elastic,Solr和Splunk分别占据了数据库搜索引擎的前三位。
从趋势上来看,Elastic和Splunk上升明显,Elastic更是表现出了非常强劲的势头。
基本概念
- 准实时(NRT)
Elasticsearch是一个准实时性的搜索平台,从数据索引到数据可以被搜索存在一定的时延。 - 索引(Index)
索引是有共同特性的文档的集合,索引有自己的名字,可以对索引执行搜索,更新,删除等操作。 - 类型(Type)
每个索引可以包含一个或者多个类型,类型可以看作一个索引数据的逻辑分组,通常我们会把拥有相同字段的文档定义为同一个类型。 - 文档(Document)
文档是索引信息的基本单元。Elastic中文档表现为JSON对象,文档物理存贮在索引中,并需要被制定一个类型。因为表现为JSON, 很自然的,文档是由一个个的字段(Feilds)组成,每个字段是一个名值对(Name Value Pair) - 评分(score)
Elastic是基于Lucene构建的,所以搜索的结果会有一个打分。来评价搜索结果和查询的相关性。
下图是一个Elastic的搜索在Kibana中看到的例子,原始的数据是一个简单的日志文件:
我们通过logstash索引到Elasticsearch后,就可以搜索了。
- 实时性
Splunk同样是准实时的,Splunk的实时搜索(Realtime Search)可以提供不间断的搜索结果的数据流。 - 事件(Event)
对应于Elastic的文档,Splunk的数据索引的基本单元是事件,每一个事件包含了一组值,字段,时间戳。Splunk的事件可以是一段文本,一个配置文件,一段日志或者JSON对象。 - 字段(Fields)
字段是可以被搜索的名值对,不同的事件可能拥有不同的字段。Splunk支持索引时(index time)和搜索时(search time)的字段抽取(fields extraction) - 索引(Indexes)
类似Elastic的索引,所有的事件物理存储在索引上,可以把索引理解为一个数据库的表。 - 知识对象(Knowledge Object)
Splunk的知识对象提供对数据进一步的解释,分类,增强等功能,包括:字段(fields),字段抽取(fields extraction),事件类型(event type),事务(transaction),查找(lookups),标签(tags),别名(aliases),数据模型(data model)等等。
下图是一个Splunk的搜索在Splunk客户端看到的和前一个例子同样的日志数据的搜索结果。
从基本概念上来看,Elasticsearch和Splunk基本一致。从例子中我们可以看到很多的共性,事件/文档,时间戳,字段,搜索,时间轴图等等。其中有几个主要的差别:
- Elastic不支持搜索时的字段抽取,也就是说Elastic的文档中的所有字段在索引时已经固定了,而Splunk支持在搜索时,动态的抽取新的字段
- Elastic的搜索是基于评分机制的,搜索的结果有一个打分,而Splunk没有对搜索结果评分
- Splunk的知识对象可以提供对数据更高级&#x