主流大数据采集平台架构对比分析

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

主流大数据采集平台架构对比分析

目录

Apache Flume (4)

Fluentd (7)

Logstash (12)

Chukwa (13)

Scribe (14)

Splunk Forwarder (15)

总结 (17)

任何完整的大数据平台,一般包括以下的几个过程:数据采集–>数据存储–>数据处理–>数据展现(可视化,报表和监控)。

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

▪数据源多种多样

▪数据量大

▪变化快

▪如何保证数据采集的可靠性的性能

▪如何避免重复数据

▪如何保证数据的质量

今天我们也来看看主流的几个数据采集平台,重点关注它们是如何做到高可靠,高性能和高扩展。

Apache Flume

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

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

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

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

Source

Source 负责接收输入数据,并将数据写入管道。它支持HTTP、JMS、RPC、NetCat、Exec、Spooling Directory。其中Spooling 支持监视一个目录或者文件,解析其中新生成的事件。

Channel

Channel 存储,缓存从source 到Sink 的中间数据。可使用不同的配置来做Channel,例如内存、文件、JDBC等。使用内存性能高但不持久,有可能丢数据。使用文件更可靠,但性能不如内存。Sink

Sink 负责从管道中读出数据并发给下一个Agent 或者最终的目的地。它支持的不同目的地种类包括:HDFS、HBASE、Solr、ElasticSearch、File、Logger 或者其它的Flume Agent。

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

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

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

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

它提供SDK,可以支持用户定制开发。

其客户端负责在事件产生的源头把事件发送给Flume 的Agent。客户端通常和产生数据源的应用在同一个进程空间。

常见的Flume 客户端有Avro、log4J、syslog 和HTTP Post。另外ExecSource 支持指定一个本地进程的输出作为Flume 的输入。

当然很有可能,以上的这些客户端都不能满足需求,用户可以定制的客户端,和已有的FLume 的Source 进行通信,或者定制实现一种新的Source 类型。

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

Fluentd 是另一个开源数据收集框架。它使用C/Ruby 开发,用JSON 文件来统一日志数据。它的可插拔架构,支持各种不同种类和格式的数据源和数据输出。

它同时也提供高可靠和很好的扩展性。Treasure Data, Inc 对该产品提供支持和维护。

Fluentd 的部署和Flume 非常相似:

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

Input 负责接收数据或者主动抓取数据。支持syslog、http、file tail 等。

Buffer

Buffer 负责数据获取的性能和可靠性,也有文件或内存等不同类型的Buffer 可以配置。Output

Output 负责输出数据到目的地,例如文件、AWS S3 或者其它的Fluentd。Fluentd 的配置非常方便,如下图:

Fluentd 的技术栈如下图:

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

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

Fluentd 从各方面看都很像Flume,区别是使用Ruby 开发,Footprint 会小一些,但是也带来了跨平台的问题,并不能支持Windows 平台。

采用JSON 统一数据/日志格式也是它的另一个特点。相对于Flumed,配置也简单一些。Logstash

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

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

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

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

相关文档
最新文档