Flume学习01

概述

Apache Flume是一个分布式的、可靠的和可用的系统,它能把不同数据源的海量日志数据有效地收集、汇总和移动,最后存入一个集中式数据存储系统中。Flume是Apache顶级开源项目,目前有0.9.x和1.x两个主要系列,其中0.9.x系列是Flume OG(Original Generation),1.x是Flume NG(Next Generation),Flume NG比Flume OG更简单、更小、更容易部署,推荐使用Flume NG系列版本。

Flume除了可以收集日志数据外,还可以收集其他数据。由于Flume的数据源是可定制的,因此可以用来传输大量的Event Data,Event Data可以是网络流量数据、社会媒体产生的数据、电子邮件以及其他数据源产生的数据。

Flume需要运行在Java 1.6或更高版本之上,推荐使用Java 1.7。

官方网站:http://flume.apache.org/
用户手册:http://flume.apache.org/FlumeUserGuide.html
开发文档:http://flume.apache.org/FlumeDeveloperGuide.html

Flume架构

Flume的架构主要有以下几个核心概念。

名称说明
EventEvent由消息头和消息内容(a byte payload)组成,其中消息头是可选的。Event是Flume的基本数据单元,在Flume中使用Event对象来作为传递数据的格式。
Source从Client收集数据,并把数据传递给Channel,Source操作的数据是Event。
Channel连接Source和Sink,Event的临时存储区,保存由Source传递过来的Event,Channel的功能类似一个队列。
Sink从Channel中读取并移除Event,将Event发送给一个Source或者持久化到数据库中。
Agent一个独立的Flume进程,包含组件Source、Channel、Sink,通常每台机器只能运行一个Agent,一个Agent中可以包含一个或多个Source、Channel、Sink。
Client生产数据,把数据发送到Agent,数据由Source接收。


数据流模型(Data flow model)

Flume的数据流由Event贯穿始终。Event是Flume的基本数据流单位,Event由消息内容(a byte payload)和可选的消息头组成,消息头一系列字符串属性。Agent是Flume的最小的独立运行单位,由Source、Sink和Channel三大组件构成,如下图所示。


数据流模型


Event由外部系统生成,如上图的WebServer,外部系统会根据Source的需求把指定格式的Event推送到Agent,Source会捕获这些Event并进行格式化,Source支持多种Event格式,如Avro、Thrift等。Source处理后的Event会被转发到一个或多个Channel中,Channel可以看成是一个数据缓冲区(类似消息队列),Channel中的Event一直保存到Sink处理完成为止。Sink负责持久化日志或者把Event推向另一个Source,Sink处理后的Event会从Channel中移除。

Flume支持用户建立多级流,也就是Event通过多个Agent后才达到最终目的。多级流过程中如果有失败的流跳转,Flume提供扇入和扇出流(fan-in and fan-out flows)、上下文路由(contextual routing)和备份路由(backup routes or fail-over)等功能。

高可靠性

对于每个Agent,Event首先存放到Channel中,然后再传递到下一个Agent或者持久化到数据库中(如HDFS)。Channel中的Event数据直到下一个Agent接收完成或者持久化到数据库中完成才会被删除。

Flume通过基于事务的传递方式来保证事件传递的可靠性。在单个流中,Source和Sink被封装进一个事务中,Event保存在Channel中直到处理完成,该Event才会从Channel中删除。事务保证了Event在流中点到点传递的可靠性。如果是多级流,前一个Agent的Sink和后一个Agent的Source同样有它们的事务来保证Event数据安全的保存到后一个Agent的Channel中。

可恢复性

Flume通过Channel保存Event数据,其中FileChannel可以把Event数据持久化到本地的文件系统中。MemoryChannel把Event数据保存在内存中,MemoryChannel具有更高的性能,不过可恢复性较差(一旦断电或者Agent进程关掉Event数据就会丢失)。

使用场景

多个Agent顺序连接(Multi-Agent Flow)

将多个Agent顺序连接起来,将最初的数据源经过收集、整理,存储到最终的存储系统中。一般情况下,应该控制这种顺序连接的Agent的数量,因为数据流经的路径变长了,如果不考虑failover的话,出现故障将影响整个Flow上的Agent收集服务。


Multi-Agent Flow

多个Agent汇集到一个Agent(Consolidation)

这种情况应用的场景比较多,比如要收集上千个网站(网站集群)的日志,可以为这些网站配置多个Agent来收集日志,每个Agent收集一个或多个网站的日志,然后把这些Agent的数据汇集到统一的Agent中,最后由这个统一的Agent把数据持久化,如保存到HDFS。


Consolidation

多路复用(Multiplexing Flow)

Flume支持通过复用把Event数据分发到多个Channel中,Sink再把不同Channel中的数据保存到不同的地方。Flume多路复用有两种方式,一种是复制(Replicating),一种是Multiplexing。复制就是把Event数据复制多份,然后给每个Channel都发送,每个Channel接收到的数据都是相同的。以下图为例,Event数据会被复制成3份,然后分发给3个Channel。Multiplexing方式就是对Event数据进行过滤,根据消息头属性把Event分发到不同的Channel中。


Multiplexing Flow

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值