flume学习笔记

来源:互联网 发布:qq三国转职js转疾风 编辑:程序博客网 时间:2024/06/03 16:23

一、Flume介绍

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

Flume提供对数据进行简单处理,并写到各种数据接受方(可定制)的能力Flume提供了从console(控制台)、RPC(Thrift-RPC)、text(文件)、tail(UNIXtail)、syslog(syslog日志系统,支持TCP和UDP等2种模式),exec(命令执行)等数据源上收集数据的能力。

二、Flume 工作方式

flume分flume-og和flume-ng.

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

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

FLume-ng则取消了集中管理配置的Master 和 Zookeeper,变为了一个纯粹的传输工具。

此外,其读入数据和写出数据由不同的工作线程处理由不同的工作线程处理。这也就意味着只要有数据,flume就会一直保持在传输状态,而不关心下游是否来得及处理数据,一旦数据量变大,则会造成数据积压,甚至磁盘空间撑爆。

三、Flume架构

Flume采用了分层架构:分别为agent,collector和storage

agent里面包含3个核心组件:source、channel、sink。source是数据来源,sink是数据去向

在整个数据传输过程中,流动的是event。事务保证是在event级别。

flume可以支持多级flume的agent,支持扇入(fan-in)、扇出(fan-out)。

(1) agent

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

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

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

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

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

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

同时提供了很多sink,如:

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

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

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

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

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

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

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

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


(2) collector

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

它的source和sink与agent类似。

数据源(source),如:

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

·          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,也可以是HDFS,HIVE,HBase,分布式存储等。

(4) Master

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

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

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

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

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



原创粉丝点击