Flume简介

一、Flume简介

官网:http://flume.apache.org/

1.Flume是什么

Flume是一个分布式、可扩展、可靠、高可用的海量日志有效聚合及移动的框架。

2.作用是什么

Flume支持在log(日志)系统中定制各种数据发送方,用于收集数据;同时Flume也会对数据进行简单的处理,并写到各种数据接收方(文本,HDFS,Hbase等)。

依赖关系图
在这里插入图片描述

3.工作流程

flume的数据流由事件(Event)贯穿始终。事件是Flume的基本数据单位,它携带日志数据(字节数组形式)并且携带有头信息,这些Event由Agent外部的Source生成,当Source捕获事件后会进行特定的格式化,然后Source会把事件推入(单个或多个)Channel中。你可以把Channel看作是一个缓冲区,它将保存事件直到Sink处理完该事件。Sink负责持久化日志或者把事件推向另一个Source。

二、Flume的核心概念

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

Event:一个数据单元,消息头和消息体组成(它可以使avro对象,日记等)

Flow:Even从原点到达目的地的迁移的抽象

Agent:一个独立的Flume进程,包含的组件source,channel,sink。Agent使用JVM运行,一个机器只能运行一个Agent,但是一个Agent包含多个source,chennel,sink

Source:数据收集组件(从client收集,传给channel)

Channel: 中转Event的一个储存,储存来自source的event

Sink:读取chaneel中的event并且移除event,传送给下一个flow pipeline(如果有的话) 或者运行在一个独立的线程上。*

Agent:

Flume运行的核心就是agent,Flume以agent为最小的运行单位,一个agent就是一个jvm。它将数据送一个地方发送到另外一个地方,由source,channel,sink组成。

Source:

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

*Source类型 *

Source类型 	   						           | 说明
Avro Source 	         						   | 支持Avro协议(实际上是Avro RPC),内置支持
Thrift Source 	    						       | 支持Thrift协议,内置支持
Exec Source 	       						       | 基于Unix的command在标准输出上生产数据
JMS Source 	              					   | 从JMS系统(消息、主题)中读取数据
Spooling Directory Source 				   | 监控指定目录内数据变更
Twitter 1% firehose Source				   |通过API持续下载Twitter数据,试验性质
Netcat Source 	         					   | 监控某个端口,将流经端口的每一个文本行数据作为Event输入
Sequence Generator Source 			   | 序列生成器数据源,生产序列数据
Syslog Sources 	        	      			   | 读取syslog数据,产生Event,支持UDP和TCP两种协议
HTTP Source 	           						   | 基于HTTP POST或GET方式的数据源,支持JSON、BLOB表示形式
Legacy Sources 	        		               | 兼容老的Flume OG中Source(0.9.x版本)

Channel

Channel是连接source和sink的,可以把它看做是一个缓存区但是他也会把事务持久化到磁盘,这些数据知道sink处理完事务才会被删除,否则一直存在

*Channel类型 *

Channel类型 	  								|说明
Memory Channel 	         			    | Event数据存储在内存中
JDBC Channel   	        				    | Event数据存储在持久化存储中,当前Flume Channel内置支持Derby
File Channel   	          					    | Event数据存储在磁盘文件中
Spillable Memory Channel  		    | Event数据存储在内存中和磁盘上,当内存队列满了,会持久化到磁盘文件
Pseudo Transaction Channel 			| 测试用途
Custom Channel 	          			    | 自定义Channel实现

Sink:

用于输出的,从channel重提出事务,然后输出给别处,可以向文件系统,hadoop文件库,数据库,其他的agent的source。在日记较少的时候就存储在文件系统中。

*Sink数据类型 *

Sink类型 	 										|说明
HDFS Sink 	     							    | 数据写入HDFS
Logger Sink 	    						    | 数据写入日志文件
Avro Sink 	      							    | 数据被转换成Avro Event,然后发送到配置的RPC端口上
Thrift Sink 	    							    | 数据被转换成Thrift Event,然后发送到配置的RPC端口上
IRC Sink    	   								    | 数据在IRC上进行回放
File Roll Sink 	  							    | 存储数据到本地文件系统
Null Sink 	       								    | 丢弃到所有数据
HBase Sink 	     						    | 数据写入HBase数据库
Morphline Solr Sink						    | 数据发送到Solr搜索服务器(集群)
ElasticSearch Sink 							| 数据发送到Elastic Search搜索服务器(集群)
Kite Dataset Sink 							| 写数据到Kite Dataset,试验性质的
Custom Sink 	   							    | 自定义Sink实现

三、Flume的特性

A、数据可靠性(内部实现)

 *当节点出现故障时,日志能够被传送到其他节点上而不会丢失。 Flume提供了三种级别的可靠性保障,从强到弱依次分别为:*
 
*1、end-to-end:收到数据agent首先将event写到磁盘上,当数据传送成功后,再删除;如果数据发送失败,可以重新发送。*

*2、Store on failure:当数据接收方crash时   *  ---------当数据方收到数据的时候删除(都不知道有没有成功你就删除,扯淡吧)

*3、Best effort:数据发送到接收方后,不会进行确认。(udp)  *--------不管数据防怎么样,我只要发了就删除(更扯淡,所以用第一种最多)

B、自身可扩展性

 *Flume采用了三层架构(指的是OG),分别为agent,collector和storage,每一层均可以水平扩展。所有agent和 collector由master统一管理,使得系统容易监控和维护。master允许有多个(使用ZooKeeper进行管理和负载均衡),避免单点故障问题。【1.0自身agent实现扩展】 *

C、功能可扩展性

*用户可以根据需要添加自己的agent。	Flume自带了很多组件,包括各种agent(file,syslog,HDFS等) *

四、Flume使用场景

Flume在英文中的意思是水道, 但Flume更像可以随意组装的消防水管,下面根据官方文档,展示几种Flow。

多个agent顺序连接
将最初的数据源经过收集,存储到最终的存储系统中
多个Agent的数据汇聚到同一个Agent
每个节点都产生用户行为日志,可以为每 个节点都配置一个Agent来单独收集日志数据,然后多个Agent将数据最终汇聚到一个用来存储数据存储系统
多级流
当syslog, java, nginx、 tomcat等混合在一起的日志流开始流入一个agent后,可以agent中将混杂的日志流分开,然后给每种日志建立一个自己的传输通道。
load balance功能
一个路由节点,负责将Channel暂存的Event均衡到对应的多个Sink组件上,而每个Sink组件分别连接到一个独立的Agent上 。

五、Flume核心组件

Flume主要由3个重要的组件构成:

1)Source: 完成对日志数据的收集,分成transtion 和 event 打入到channel之中 Flume提供了各种source的实现,包括Avro Source、 Exce Source、 Spooling Directory Source、 NetCat Source、 Syslog Source、 Syslog TCP Source、Syslog UDP Source、 HTTP Source、 HDFS Source, etc。
  
  2)Channel: Flume Channel主要提供一个队列的功能,对source提供中的数据进行简单的缓存。Flume对于Channel, 则提供了Memory Channel、 JDBC Chanel、 File Channel,etc
  
  3)Sink: Flume Sink取出Channel中的数据,进行相应的存储文件系统,数据库,或者提交到远程服务器。包括HDFS sink、 Logger sink、 Avro sink、 File Roll sink、 Null sink、 HBasesink, etc。

Source

Spool Source 如何使用?
  
  在实际使用的过程中,可以结合log4j使用,使用log4j的时候,将log4j的文件分割机制设为1分钟一次,将文件拷贝到spool的监控目录。 log4j有一个TimeRolling的插件,可以把log4j分割的文件到spool目录。基本实现了实时的监控。 Flume在传完文件之后,将会修 改文
件的后缀,变为.COMPLETED(后缀也可以在配置文件中灵活指定)

Exec Source 和Spool Source 比较
  
  1) ExecSource可以实现对日志的实时收集,但是存在Flume不运行或者指令执行出错时,将无法收集到日志数据,无法何证日志数据的完整性
  2) SpoolSource虽然无法实现实时的收集数据,但是可以使用以分钟的方式分割文件,趋近于实时。
  3)总结:如果应用无法实现以分钟切割日志文件的话,可以两种 收集方式结合使用。

Channel

1)MemoryChannel可以实现高速的吞吐, 但是无法保证数据完整性
  2)MemoryRecoverChannel在官方文档的建议上已经建义使用FileChannel来替换。FileChannel保证数据的完整性与一致性。在具体配置不现的FileChannel时,建议FileChannel设置的目录和程序日志文件保存的目录设成不同的磁盘,以便提高效率。

Sink

Flume Sink在设置存储数据时,可以向文件系统中,数据库中, hadoop中储数据,在日志数据较少时,可以将数据存储在文件系中,并且设定一定的时间间隔保存数据。在日志数据较多时,可以将相应的日志数据存储到Hadoop中,便于日后进行相应的数据分析。

1)flume的可靠性

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

还是靠Channel。推荐使用FileChannel,事件持久化在本地文件系统里(性能较差)。

flume历史小知识

	flume 作为 cloudera 开发的实时日志收集系统,受到了业界的认可与广泛应用。Flume 初始的发行版本目前被统称为 Flume OG(original generation),属于 cloudera。但随着 FLume 功能的扩展,Flume OG 代码工程臃肿、核心组件设计不合理、核心配置不标准等缺点暴露出来,尤其是在 Flume OG 的最后一个发行版本 0.9.4. 中,日志传输不稳定的现象尤为严重,为了解决这些问题,2011 年 10 月 22 号,cloudera 完成了 Flume-728,对 Flume 进行了里程碑式的改动:重构核心组件、核心配置以及代码架构,重构后的版本统称为 Flume NG(next generation);改动的另一原因是将 Flume 纳入 apache 旗下,cloudera Flume 改名为 Apache Flume。
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值