大数据系统数据采集产品的架构分析

任何完整的大数据平台,一般包括以下的几个过程:

  1. 数据采集
  2. 数据存储
  3. 数据处理
  4. 数据展现(可视化,报表和监控)

其中,数据采集是所有数据系统必不可少的,随着大数据越来越被重视,数据采集的挑战也变的尤为突出。这其中包括:

  • 数据源多种多样
  • 数据量大,变化快
  • 如何保证数据采集的可靠性的性能
  • 如何避免重复数据
  • 如何保证数据的质量

我们今天就来看看当前可用的一些数据采集的产品,重点关注一些它们是如何做到高可靠,高性能和高扩展。

Apache Flume

Flume 是Apache旗下,开源,高可靠,高扩展,容易管理,支持客户扩展的数据采集系统。 Flume使用JRuby来构建,所以依赖Java运行环境。

Flume最初是由Cloudera的工程师设计用于合并日志数据的系统,后来逐渐发展用于处理流数据事件。

Flume设计成一个分布式的管道架构,可以看作在数据源和目的地之间有一个Agent的网络,支持数据路由。

每一个agent都由Source,Channel和Sink组成。

  • SourceSource负责接收输入数据,并将数据写入管道。Flume的Source支持HTTP,JMS,RPC,NetCat,Exec,Spooling Directory。其中Spooling支持监视一个目录或者文件,解析其中新生成的事件。
  • ChannelChannel 存储,缓存从source到Sink的中间数据。可使用不同的配置来做Channel,例如内存,文件,JDBC等。使用内存性能高但不持久,有可能丢数据。使用文件更可靠,但性能不如内存。
  • SinkSink负责从管道中读出数据并发给下一个Agent或者最终的目的地。Sink支持的不同目的地种类包括:HDFS,HBASE,Solr,ElasticSearch,File,Logger或者其它的Flume Agent

Flume在source和sink端都使用了transaction机制保证在数据传输中没有数据丢失。

Source上的数据可以复制到不同的通道上。每一个Channel也可以连接不同数量的Sink。这样连接不同配置的Agent就可以组成一个复杂的数据收集网络。通过对agent的配置,可以组成一个路由复杂的数据传输网络。

配置如上图所示的agent结构,Flume支持设置sink的Failover和Load Balance,这样就可以保证即使有一个agent失效的情况下,整个系统仍能正常收集数据。

Flume中传输的内容定义为事件(Event),事件由Headers(包含元数据,Meta Data)和Payload组成。

Flume提供SDK,可以支持用户定制开发:

Flume客户端负责在事件产生的源头把事件发送给Flume的Agent。客户端通常和产生数据源的应用在同一个进程空间。常见的Flume客户端有Avro,log4J,syslog和HTTP Post。另外ExecSource支持指定一个本地进程的输出作为Flume的输入。当然很有可能,以上的这些客户端都不能满足需求,用户可以定制的客户端,和已有的FLume的Source进行通信,或者定制实现一种新的Source类型。

同时,用户可以使用Flume的SDK定制Source和Sink。似乎不支持定制的Channel。

Fluentd

Fluentd (Github 地址)是另一个开源的数据收集框架。Fluentd使用C/Ruby开发,使用JSON文件来统一日志数据。它的可插拔架构,支持各种不同种类和格式的数据源和数据输出。最后它也同时提供了高可靠和很好的扩展性。Treasure Data, Inc对该产品提供支持和维护。

Fluentd的部署和Flume非常相似:

Fluentd的架构设计和Flume如出一辙:

Fluentd的Input/Buffer/Output非常类似于Flume的Source/Channel/Sink。

  • InputInput负责接收数据或者主动抓取数据。支持syslog,http,file tail等。
  • BufferBuffer负责数据获取的性能和可靠性,也有文件或内存等不同类型的Buffer可以配置。
  • OutputOutput负责输出数据到目的地例如文件,AWS S3或者其它的Fluentd。

Fluentd的配置非常方便,如下图:

Fluentd的技术栈如下图:

FLuentd和其插件都是由Ruby开发,MessgaePack提供了JSON的序列化和异步的并行通信RPC机制。

Cool.io是基于libev的事件驱动框架。

FLuentd的扩展性非常好,客户可以自己定制(Ruby)Input/Buffer/Output。

Fluentd从各方面看都很像Flume,区别是使用Ruby开发,Footprint会小一些,但是也带来了跨平台的问题,并不能支持Windows平台。另外采用JSON统一数据/日志格式是它的另一个特点。相对去Flumed,配置也相对简单一些。

Logstash

Logstash是著名的开源数据栈ELK(ElasticSearch,Logstash,Kibana)中的那个L。

Logstash用JRuby开发,所有运行时依赖JVM。

Logstash的部署架构如下图,当然这只是一种部署的选项。

一个典型的Logstash的配置如下,包括了Input,filter的Output的设置。

input { file { type => 'apache-access' path => '/var/log/apache2/other_vhosts_access.log' } file { type => 'apache-error' path => '/var/log/apache2/error.log' }}filter { grok { match => { 'message' => '%{COMBINEDAPACHELOG}' } } date { match => [ 'timestamp' , 'dd/MMM/yyyy:HH:mm:ss Z' ] }}output { stdout { } redis { host => '192.168.1.200' data_type => 'list' key => 'logstash' }}

几乎在大部分的情况下ELK作为一个栈是被同时使用的。所有当你的数据系统使用ElasticSearch的情况下,logstash是首选。

Chukwa

Apache Chukwa (github)是apache旗下另一个开源的数据收集平台,它远没有其他几个有名。Chukwa基于Hadoop的HDFS和Map Reduce来构建(显而易见,它用Java来实现),提供扩展性和可靠性。Chukwa同时提供对数据的展示,分析和监视。很奇怪的是它的上一次github的更新事7年前。可见该项目应该已经不活跃了。

Chukwa的部署架构如下。

Chukwa的主要单元有:Agent,Collector,DataSink,ArchiveBuilder,Demux等等,看上去相当复杂。

由于该项目已经不活跃,我们就不细看了。

Scribe

Scribe是Facebook开发的数据(日志)收集系统。已经多年不维护,同样的,就不多说了。

Splunk Forwarder

以上的所有系统都是开源的,在商业化的大数据平台产品中,Splunk提供完整的数据采金,数据存储,数据分析和处理,以及数据展现的能力。

Splunk是一个分布式的机器数据平台,主要有三个角色:

  • Search Head负责数据的搜索和处理,提供搜索时的信息抽取。
  • Indexer负责数据的存储和索引
  • Forwarder,负责数据的收集,清洗,变形,并发送给Indexer

Splunk内置了对Syslog,TCP/UDP,Spooling的支持,同时,用户可以通过开发Script Input和Modular Input的方式来获取特定的数据。在Splunk提供的软件仓库里有很多成熟的数据采集应用,例如AWS,数据库(DBConnect)等等,可以方便的从云或者是数据库中获取数据进入Splunk的数据平台做分析。

这里要注意的是,Search Head和Indexer都支持Cluster的配置,也就是高可用,高扩展的,但是Splunk现在还没有针对Farwarder的Cluster的功能。也就是说如果有一台Farwarder的机器出了故障,数据收集也会随之中断,并不能把正在运行的数据采集任务Failover到其它的Farwarder上。

总结

我们简单讨论了几种流行的数据收集平台,它们大都提供高可靠和高扩展的数据收集。大多平台都抽象出了输入,输出和中间的缓冲的架构。利用分布是的网络连接,大多数平台都能实现一定程度的扩展性和高可靠性。其中Flume,Fluentd是两个被使用较多的产品。如果你用ElasticSearch,Logstash也许是首选,因为ELK栈提供了很好的集成。Chukwa和Scribe由于项目的不活跃,不推荐使用。

Splunk作为一个优秀的商业产品,它的数据采集还存在一定的限制,相信Splunk很快会开发出更好的数据收集的解决方案。

(0)

相关推荐

  • 号称下一代日志收集系统!来看看它有多强

    后面随着架构的优化与演进,又引入另一个轻量级的组件 Filebeat,Filebeat和Logstash一样属于日志收集处理工具,基于原先 Logstash-fowarder 的源码改造出来的.与Lo ...

  • EFK:免费的日志采集与可视化搜索套件

    我们收集日志是为了做进一步的分析.收集是第一步,收集到日志后还需要进行存储.索引,以便进行快速查询分析.我们还需要一个友好的查询界面,来方便用户使用日志. 本文介绍一个免费的开源软件组合,正好可以实现 ...

  • Fluentd配置:解析(Parse)配置项

    Fluentd的某些插件支持<parse>配置项,用来自定义对输入数据的解析方法. 比如,对于一般的应用程序,输入给Fluentd的就是一行行的文本,开发者可以通过配置将文本解析成具有实际 ...

  • Fluentd输入插件:in_tail用法详解

    in_tail输入插件内置于Fluentd中,无需安装.它允许fluentd从文本文件尾部读取日志事件,其行为类似linux的tail -F命令(按文件名来tail).这几乎是最常用的一个输入插件了. ...

  • 使用Fluentd发送告警邮件

    告警是预防系统故障的一个重要工具,目前已经有许多成熟的方案通过监控系统运行指标来进行阈值预警. 我们今天简单了解一下如何使用Fluentd实现邮件告警功能. Fluentd的告警是基于日志分析实现的, ...

  • ELK迁移到splunk

    Elk到Splunk迁移选项 麋鹿的Splunk应用程序(孵化) –连接到Elasticsearch并将数据和仪表板导入Splunk 导入Splunk的仪表板最初搜索Elasticsearch数据节点 ...

  • 大数据安全分析05_数据采集技术

    大数据分析中的数据采集方式包括Logstash.Flume.Fluentd.Logtail等,本文对这几种数据采集技术进行简要介绍. Logstash Logstash是一个具备实时处理能力的开源的数 ...

  • Fluentd输出插件:rewrite_tag_filter用法详解

    我们在做日志处理时,往往会从多个源服务器收集日志,然后在一个(或一组)中心服务器做日志聚合分析.源服务器上的日志可能属于同一应用类型,也可能属于不同应用类型. 我们可能需要在聚合服务器上对这些不同类型 ...

  • 九大数据分析方法之:周期性分析法 | 人人都是产品经理

    编辑导读:做数据分析,有常用的九种方法,这是每一个数据分析师都必须掌握的基础知识.本文主要分析周期性分析法,它是新人们避免犯小白错误的最好方法,一起来看看吧. 大家好,我是爱学习的小xiong熊妹. ...

  • 实例分析压缩比对大平方线束产品温升性能的影响

    摘要 1. 通过实际的案例分析,让大家了解压接标准上的压缩比参数对于产品的温升电气性能的重要影响: 关键词:案例分析,压缩比,温升: 众所周知,压接对于线束产品的机械,电气和物理性能有很多直接或者间接 ...

  • 产品创新案例分析|大疆如何从初创到无人机帝国的进阶之路

    与智能手机.个人电脑和互联网的发展类似,无人机也迅速从一种DIY爱好发展成为风靡全球的主流技术.如今的无人机产品一代比一代更小巧.安全.便宜,其飞行功能和拍摄质量也在快速地提高.而在无人机这个规模达百 ...

  • 蠕墨铸铁件生产,8大技术常见技术难题汇总分析!

    蠕墨铸铁 蠕墨铸铁件除了蠕化处理问题,还有哪些问题? 在蠕墨铸铁件生产中,常见的铸件缺陷除有灰铸铁件的一般缺陷外,还有蠕化不成.蠕化率低.蠕化衰退.白口过大.孕育衰退.石墨漂浮.表面片状石墨层.夹渣等 ...

  • 初中化学十大易错点举例讲解分析!

    中考化学易错点一:走进化学实验 易错点: 滴管的使用.液体的倾倒.酒精灯的使用.药品的取用与加热,同学们在操作时往往顾及不全,导致操作时失误较多. [例1]小明同学用调节好的托盘天平称量10.5g氯化 ...

  • 蠕墨铸铁的8大常见技术问题、原因分析及预防措施

    蠕墨铸铁 蠕墨铸铁件除了蠕化处理问题,还有哪些问题? 在蠕墨铸铁件生产中,常见的铸件缺陷除有灰铸铁件的一般缺陷外,还有蠕化不成.蠕化率低.蠕化衰退.白口过大.孕育衰退.石墨漂浮.表面片状石墨层.夹渣等 ...

  • 初中化学十大易错点举例讲解分析

    中考化学易错点一:走进化学实验 易错点: 滴管的使用.液体的倾倒.酒精灯的使用.药品的取用与加热,同学们在操作时往往顾及不全,导致操作时失误较多. [例1]小明同学用调节好的托盘天平称量10.5g氯化 ...

  • ​产品销售策略分析

    编辑导语:产品经理在日常工作中,除了要跟进和把控产品的整体流程以外,也要对产品后续的销售策略进行规划:因为销售策略的规划可以让产品经理对于用户的场景以及体验等更加熟悉,以此进行产品研发的优化:本文作者 ...

  • FPGA、Zynq 和 Zynq MPSoC简析及架构分析

    FPGAs,Zynq 和 Zynq MPSoC! Zynq MPSoC是Zynq-7000 SoC(之后简称Zynq)的进化版本.Zynq是赛灵思发布的集成PL(FPGA)和PS设计的最早的一代产品. ...