设为首页 加入收藏

TOP

大数据搜索选开源还是商业软件?ElasticSearch 对比 Splunk(一)
2018-02-06 13:13:07 】 浏览:992
Tags:数据 搜索 开源 还是 商业软件 ElasticSearch 对比 Splunk

本文就架构,功能,产品线,概念等方面就ElasticSearch和Splunk做了一下全方位的对比,希望能够大家在制定大数据搜索方案的时候有所帮助。

简介

ElasticSearch (1)(2)是一个基于Lucene的开源搜索服务。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。Elasticsearch是用Java开发的,并作为Apache许可条款下的开放源码发布,是当前流行的企业级搜索引擎。设计用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便。

ELKElasticSearchLogstashKibana的缩写,分别提供搜索,数据接入和可视化功能,构成了Elastic的应用栈。

Splunk 是大数据领域第一家在纳斯达克上市公司,Splunk提供一个机器数据的引擎。使用 Splunk 可收集、索引和利用所有应用程序、服务器和设备(物理、虚拟和云中)生成的快速移动型计算机数据 。从一个位置搜索并分析所有实时和历史数据。 使用 Splunk 处理计算机数据,可让您在几分钟内(而不是几个小时或几天)解决问题和调查安全事件。监视您的端对端基础结构,避免服务性能降低或中断。以较低成本满足合规性要求。关联并分析跨越多个系统的复杂事件。获取新层次的运营可见性以及 IT 和业务智能。

根据最新的数据库引擎排名显示,Elastic,Solr和Splunk分别占据了数据库搜索引擎的前三位。

趋势上来看,Elastic和Splunk上升明显,Elastic更是表现出了非常强劲的势头。

基本概念

Elastic

  • 准实时(NRT)
    Elasticsearch是一个准实时性的搜索平台,从数据索引到数据可以被搜索存在一定的时延。
  • 索引(Index)
    索引是有共同特性的文档的集合,索引有自己的名字,可以对索引执行搜索,更新,删除等操作。
  • 类型(Type)
    每个索引可以包含一个或者多个类型,类型可以看作一个索引数据的逻辑分组,通常我们会把拥有相同字段的文档定义为同一个类型。
  • 文档(Document)
    文档是索引信息的基本单元。Elastic中文档表现为JSON对象,文档物理存贮在索引中,并需要被制定一个类型。因为表现为JSON, 很自然的,文档是由一个个的字段(Feilds)组成,每个字段是一个名值对(Name Value Pair)
  • 评分(score)
    Elastic是基于Lucene构建的,所以搜索的结果会有一个打分。来评价搜索结果和查询的相关性。

下图是一个Elastic的搜索在Kibana中看到的例子,原始的数据是一个简单的日志文件:

我们通过logstash索引到Elasticsearch后,就可以搜索了。

Splunk

  • 实时性
    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的知识对象可以提供对数据更高级,更灵活的管理能力。

用户接口

ElasticSearch提供REST API来进行

  • 集群的管理,监控,健康检查
  • 索引的管理(CURD)
  • 搜索的执行,包括排序,分页,过滤,脚本,聚合等等高级的搜索功能。

Elasticsearch 本身并没有提供任何UI的功能,搜索可以用Kibana,但是没有管理UI还是让人不爽的,好在开源的好处就是会有很多的开发者来构建缺失的功能:

另一选择就是安装X-Pack,这个是要收费的。

Splunk作为企业软件,管理及访问接口比较丰富,除了REST API 和命令行接口,Splunk的UI非常友好易用,基本上所有的功能都能通过集成的UI来使用。同时提供以下接口

  • REST API
  • Splunk UI
  • CLI

功能

数据接入和获取

Elastic栈使用Logstash和Beats来进行数据的消化和获取。

Logstash用jruby实现,有点像一个数据管道,把输入的数据进行处理,变形,过滤,然后输出到其它地方。Logstash 设计了自己的 DSL,包括有区域,注释,数据类型(布尔值,字符串,数值,数组,哈希),条件判断,字段引用等。

Logstash的数据管道包含三个步骤,Input,Filter和Output,每一步都可以通过plugin来扩展。另外Input和Output还支持配置Codecs,完成对输入输出数据的编解码工作。

Logstash支持的常见的Input包含File,syslog,beats等。Filter中主要完成数据的变形处理,可以增删改字段,加标签,等等。作为一个开源软件,Output不仅仅支持ElasticSearch,还可以和许多其它软件集成和目标,Output可以是文件,graphite,数据库,Nagios,S3,Hadoop等。

在实际运用中,logstash 进程会被分为两个不同的角色。运行在应用服务器上的,尽量减轻运行压力,只做读取和转发,这个角色叫做 shipper;运行在独立服务器上,完成数据解析处理,负责写入 Elasticsearch 的角色,叫 indexer。

logstash 作为无状态的软件,配合消息队列系统,可以很轻松的做到线性扩展

Beats是 Elastic 从 packetbeat 发展出来的数据收集器系统。beat 收集器可以直接写入 Elasticsearch,也可以传输给 Logstash。其中抽象出来的 libbeat,提

首页 上一页 1 2 3 4 下一页 尾页 1/4/4
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇Java 异常处理的 9 个最佳实践 下一篇通向架构师的道路(第七天)之漫..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目