FlumeNG

Flume是什么?

收集、聚合事件流数据的分布式框架

通常用于log数据

采用ad-hoc方案,有如下优点:

     可靠的、可伸缩、可管理、可定制、高性能

     声明式配置,可以动态更新配置

     提供上下文路由功能

     支持负载均衡和故障转移

     功能丰富

     完全的可扩展

数据收集的框架

Flume的data flow

data flow描述了数据从产生,运输、处理并最终写入目标的一条路径。

数据的采集的流向

host->collector->HDFS

Flume的可靠性

可靠性:当节点出现故障时,日志能够被传送到其它节点而不会丢失。Flume提供了三种级别的可靠性

保障,从强到弱一次分别为:end-to-end(收到数据agent首先将event写到磁盘上,当数据传送成功后

再删除;如果数据发送失败,可以重新发送。),Store on failure(这也是scribe采用的策略,当数

据接收方crash时。讲数据写到本地,待恢复后,继续发送)。Best effort(数据发送到接收方后,不

会进行确认)。

Flume的可扩展性

可扩展性:Flume采用了三层架构,分别为agent,collector和storage,每一层均可以水平扩展。其中

所有agent collectormaster统一管理,这使得系统容易监控和维护,且master允许有多个(使用ZooKeeper进行管理和负载均衡),这就避免了单点故障问题。

功能可扩展性:用户可以根据需要添加自己的agentcollector或者storage。此外,Flume自带了很多组件,包括各种agentfilesyslog等),collectorstoragefileHDFS等)。

Flume的可管理性

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

核心概念

Event:一条数据

Client:生成数据,运行在一个独立的线程。

Agent

Sources、Channels、Sinks

其他组件:Interceptors、Channel Selectors、Sink Processor

Flume的client

Client:生产数据,运行在一个独立的线程。

Flume的Source

Source:从Client收集数据,传递给Channel。可以接收外部源发送过来的数据。不同的 source,可以接受不同的数据格式。 比如有目录池(spooling directory)数据源,可以监控指定文件夹中的新文件变化,如果目录中有文件产生,就会立刻读取其内容。

Flume的Channel

Channel:是一个存储地,接收source的输出,直到有sink消费掉channel中的数据。Channel中的数据直到进入到下一个channel中或者进入终端才会被删除。当sink写入失败后,可以自动重启,不会造成数据丢失,因此很可靠。

Flume的Event

Flume NG传输的数据的基本单位是event,如果是文本文件,通常是一行记录,这也是事务的基本单位。

Flume的Agent

text(filename):将文件filename作为数据源,按行发送
tail(filename):探测filename新产生的数据,按行发送出去
fsyslogTcp(5140):监听TCP的5140端口,并且接收到的数据发送出去
tailDir(dirname[, fileregex=".*"[, startFromEnd=false[, recurseDepth=0]]]):监听目录中的文件末尾,使用正则去选定需要监听的文件(不包含目录),recurseDepth为递归监听其下子 目录的深度
Flume的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失败后,它会非常执着的再来一遍
Flume的Collector
Collector的作用是将多个Agent的数据汇总后,加载到Storage中。它的sourcesinkagent类似。
数据源(source),如:
collectorSource[(port)]Collector source,监听端口汇聚数据
autoCollectorSource:通过master协调物理节点自动汇聚数据
logicalSource:逻辑source,由master分配端口并监听rpcSink
sink,如:
collectorSink( fsdir,fsfileprefix,rollmillis)collectorSink,数据通过collector汇聚之后发送到hdfs, fsdirhdfs目录,fsfileprefix为文件前缀码
customdfs(hdfspath[, "format"]):自定义格式dfs
Flume的Storage&Master
storage是存储系统,可以是一个普通file,也可以是HDFSHIVEHBase,分布式存储等。
Master是管理协调AgentCollector的配置等信息,是flume集群的控制器。

你可能感兴趣的:(FlumeNG)