一、Flume介绍
Flume是一种分布式的、可靠的和高可用大量日志聚合系统支持在系统中定制各种数据发送者来收集数据;同时,Flume提供简单处理数据并写入各种数据接受者(可定制)的能力。
Flume提供简单处理数据的能力,并写下各种数据接受者(可定制) Flume提供console(控制台)、RPC(Thrift-RPC)、text(文件)、tail(UNIX tail)、syslog(syslog日志系统,支持TCP和UDP等两种模式),exec在数据源上收集数据的能力(命令执行)。
二、Flume 工作方式
flume分flume-og和flume-ng.
Flume-og采用多Master的方式引入Zookeper,可以保存配置数据。Zookeeper本身可以保证配置数据的一致性和高可用性。此外,当配置数据发生变化时,Zookeeper可以通知Flume。 Master节点。
Flume gossip协议同步数据用于Master之间。
FLume-ng取消了集中管理配置 Master 和 Zookeeper,它变成了一种纯粹的传输工具。
此外,读取和写入的数据由不同的工作线程处理,由不同的工作线程处理。这意味着只要有数据,flume就会保持传输状态,而不管下游是否有时间处理数据。一旦数据量增加,数据就会积压,甚至磁盘空间也会爆炸。
三、Flume架构
Flume采用agent、collector和分层架构storage。
agent包含三个核心组件:source、channel、sink。source是数据来源,sink是数据去向。
event在整个数据传输过程中流动。事务保证在event级别。
flume可支持多级flumeagent,支持风扇进入(fan-in)、扇出(fan-out)。
(1) agent
agent的作用是将数据源的数据发送到collector。
Flume有许多直接可用的数据源(source),如:
text(“filename”):以文件filename为数据源,按行发送
tail(“filename”):检测filename新生成的数据,并按行发送
fsyslogTcp(5140):监控TCP5140端口,发送收到的数据
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.作为默认collecotrt,port作为默认colllecotrt
agentDFOSink[("machine"[,port])]:本地热备agent,agent发现colector节点故障后,不断检查colector的生存状态,以便重新发送event,此间产生的数据将缓存到本地磁盘中
agentBESink[("machine"[,port])]:不负责任的agent,如果colector出现故障,将不进行任何处理,其发送的数据将直接丢弃
agente2EChain:指定多个collector提高可用性。当向主collector发送event失败时,转向第二个collector发送。当所有collector失败时,它将非常执着地再次发送
(2) collector
collector的作用是将多个agent数据汇总,加载到storage中。
它的source和sink类似于agent。
数据源(source),如:
collectorSource[(port)]:Collector source,数据汇集在监控端口
autoCollectorSource:通过master协调物理节点自动收集数据
logicalSource:逻辑source由master分配,并监控rpcsink
sink,如:
collectorSink("fsdir","fsfileprefix",rollmillis):collectorSink,通过collector汇集数据后发送到hdfs, fsfileprefix是hdfs目录中的文件前缀码
customdfs("hdfspath"[,"format"]):dfs自定义格式
(3)storage
storage是一种存储系统,可以是普通的file,也可以是HDFS,HIVE,HBase,分布式存储等。
(4)Master
Master是管理协调agent和collector配置的信息,是flume集群的控制器。
在Flume中,最重要的抽象是data flow(数据流),data flow描述了数据从生成、传输、处理和最终写入目标的路径。
agent数据流配置是从哪里获取数据,将数据发送到哪个collector。
collector接收agent发送的数据,并将数据发送到指定的目标机器。
注:Flume框架只依赖于jar包上的hadoop和zookeper,flume启动时不需要hadoop和zookeper服务。