初识Flume

一、flume简介

FlumeCloudera提供的日志收集系统,Flume支持在日志系统中定制各类数据发送方,用于收集数据;同时,Flume提供对数据进行简单处理,并写到各种storageFlume是一个分布式、可靠、和高可用的海量日志采集、聚合和传输的系统。


上图的FlumeArchitecture,在Flume中,最重要的抽象是data flow(数据流)data flow描述了数据从产生,传输、处理并最终写入目标的一条路径。在上图中,实线描述了data flow

其中,Agent用于采集数据,agentflume中产生数据流的地方,同时,agent会将产生的数据流传输到collector。对应的,collector用于对数据进行聚合,往往会产生一个更大的流。

Flume提供了从console(控制台)RPC(Thrift-RPC)text(文件)tail(UNIX tail)syslog(syslog日志系统,支持TCPUDP2种模式)exec(命令执行)等数据源上收集数据的能力。同时,Flume的数据接受方,可以是console(控制台)text(文件)dfs(HDFS文件)RPC(Thrift-RPC)syslogTCP(TCPsyslog日志系统)等。

  其中,收集数据有2种主要工作模式,如下:

Push Sources:外部系统会主动地将数据推送到Flume中,如RPCsyslog

Polling SourcesFlume到外部系统中获取数据,一般使用轮询的方式,如textexec

  注意,在Flume中,agentcollector对应,而sourcesink对应。Sourcesink强调发送、接受方的特性(如数据格式、编码等),而agentcollector关注功能。

Flume Master用于管理数据流的配置,如下图。


为了保证可扩展性,Flume采用了多Master的方式。为了保证配置数据的一致性,Flume引入了ZooKeeper,用于保存配置数据,ZooKeeper本身可保证配置数据的一致性和高可用,另外,在配置数据发生变化时,ZooKeeper可以通知Flume Master节点。

Flume Master间使用gossip协议同步数据。

  下面简要分析Flume如何支持ReliabilityScalabilityManageabilityExtensibility

ReliabilityFlume提供3中数据可靠性选项,包括End-to-endStore on failureBest effort。其中End-to-end使用了磁盘日志和接受端Ack的方式,保证Flume接受到的数据会最终到达目的。Store on failure在目的不可用的时候,数据会保持在本地硬盘。和End-to-end不同的是,如果是进程出现问题,Store on failure可能会丢失部分数据。Best effort不做任何QoS保证。

ScalabilityFlume3大组件:collectormasterstorage tier都是可伸缩的。需要注意的是,Flume中对事件的处理不需要带状态,它的Scalability可以很容易实现。

ManageabilityFlume利用ZooKeepergossip,保证配置数据的一致性、高可用。同时,多Master,保证Master可以管理大量的节点。

Extensibility:基于Java,用户可以为Flume添加各种新的功能,如通过继承Source,用户可以实现自己的数据接入方式,实现Sink的子类,用户可以将数据写往特定目标,同时,通过SinkDecorator,用户可以对数据进行一定的预处理。

 注:以上介绍来自:http://caibinbupt.iteye.com/blog/765960,更多了解请参考Flume主页:https://github.com/cloudera/flume/

二、为什么选择flume

目前可选的开源日志收集项目有如下这些:facebookscribeapachechukwalinkedinkafkaclouderaflume,注:flume正逐步迁移到apache下。其他项目的介绍课参考各项目主页:

scribe主页:https://github.com/facebook/scribe

chukwa主页:http://incubator.apache.org/chukwa/

kafka主页:http://sna-projects.com/kafka/

在此参考网友绘制的对比图表:


(图表来自:http://dongxicheng.org/search-engine/log-systems/

从上图中可以看出flume作为开源的日志收集项目比较优秀,使用广泛,参考资料比较多。整体设计架构提供了强大的可扩展性和丰富的自带插件。

 

FLUME日志收集

 

一、FLUME介绍

Flume是一个分布式、可靠、和高可用的海量日志聚合的系统,支持在系统中定制各类数据发送方,用于收集数据;同时,Flume提供对数据进行简单处理,并写到各种数据接受方(可定制)的能力。

设计目标:

(1) 可靠性

当节点出现故障时,日志能够被传送到其他节点上而不会丢失。Flume提供了三种级别的可靠性保障,从强到弱依次分别为:end-to-end(收到数据agent首先将event写到磁盘上,当数据传送成功后,再删除;如果数据发送失败,可以重新发送。),Storeon failure(这也是scribe采用的策略,当数据接收方crash时,将数据写到本地,待恢复后,继续发送),Besteffort(数据发送到接收方后,不会进行确认)。

(2) 可扩展性

Flume采用了三层架构,分别为agentcollectorstorage,每一层均可以水平扩展。其中,所有agentcollectormaster统一管理,这使得系统容易监控和维护,且master允许有多个(使用ZooKeeper进行管理和负载均衡),这就避免了单点故障问题。

(3) 可管理性

所有agentcolletormaster统一管理,这使得系统便于维护。多master情况,Flume利用ZooKeepergossip,保证动态配置数据的一致性。用户可以在master上查看各个数据源或者数据流执行情况,且可以对各个数据源配置和动态加载。Flume提供了web shellscript command两种形式对数据流进行管理。

(4) 功能可扩展性

用户可以根据需要添加自己的agentcollector或者storage。此外,Flume自带了很多组件,包括各种agentfile syslog等),collectorstoragefileHDFS等)。

 

二、FLUME架构

flume 的逻辑架构:、


正如前面提到的,Flume采用了分层架构:分别为agentcollectorstorage。其中,agentcollector均由两部分组成:sourcesinksource是数据来源,sink是数据去向

Flume使用两个组件:MasterNodeNode根据在Mastershellweb中动态配置,决定其是作为Agent还是Collector

(1)agent

agent的作用是将数据源的数据发送给collector

Flume自带了很多直接可用的数据源(source),如:

·        text(“filename”):将文件filename作为数据源,按行发送

·        tail(“filename”):探测filename新产生的数据,按行发送出去

·        fsyslogTcp(5140):监听TCP5140端口,并且接收到的数据发送出去

·        tailDir("dirname"[,fileregex=".*"[, startFromEnd=false[, recurseDepth=0]]]):监听目录中的文件末尾,使用正则去选定需要监听的文件(不包含目录),recurseDepth为递归监听其下子目录的深度

更多可参见这位朋友的整理:http://www.cnblogs.com/zhangmiao-chp/archive/2011/05/18/2050465.html

同时提供了很多sink,如:

·        console[("format")] :直接将将数据显示在consolr

·        text(“txtfile”):将数据写到文件txtfile

·        dfs(“dfsfile”):将数据写到HDFS上的dfsfile文件中

·        syslogTcp(“host”,port):将数据通过TCP传递给host节点

·        agentSink[("machine"[,port])]:等价于agentE2ESink,如果省略,machine参数,默认使用flume.collector.event.hostflume.collector.event.port作为默认collecotr

·        agentDFOSink[("machine"[,port])]:本地热备agentagent发现collector节点故障后,不断检查collector的存活状态以便重新发送event,在此间产生的数据将缓存到本地磁盘中

·        agentBESink[("machine"[,port])]:不负责的agent,如果collector故障,将不做任何处理,它发送的数据也将被直接丢弃

·        agentE2EChain:指定多个collector提高可用性。当向主collector发送event失效后,转向第二个collector发送,当所有的collector失败后,它会非常执着的再来一遍

更多可参见这位朋友的整理:http://www.cnblogs.com/zhangmiao-chp/archive/2011/05/18/2050472.html

(2)collector

collector的作用是将多个agent的数据汇总后,加载到storage中。

它的sourcesinkagent类似。

数据源(source),如:

·        collectorSource[(port)]Collector source,监听端口汇聚数据

·        autoCollectorSource:通过master协调物理节点自动汇聚数据

·        logicalSource:逻辑source,由master分配端口并监听rpcSink

sink,如:

·        collectorSink("fsdir","fsfileprefix",rollmillis)collectorSink,数据通过collector汇聚之后发送到hdfs, fsdir hdfs目录,fsfileprefix为文件前缀码

·        customdfs("hdfspath"[,"format"]):自定义格式dfs

(3) storage

storage是存储系统,可以是一个普通file,也可以是HDFSHIVEHBase,分布式存储等。

(4) Master

Master是管理协调agentcollector的配置等信息,是flume集群的控制器。

 

Flume 中,最重要的抽象是 data flow (数据流), dataflow 描述了数据从产生,传输、处理并最终写入目标的一条路径。


1.  对于agent数据流配置就是从哪得到数据,把数据发送到哪个collector

2.  对于collector是接收agent发过来的数据,把数据发送到指定的目标机器上。

注:Flume框架对hadoopzookeeper的依赖只是在jar包上,并不要求flume启动时必须将hadoopzookeeper服务也启动。

 

其他配置以及相关资料,可参见博客:

http://blog.csdn.net/wulantian/article/details/46341135


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值