三十六、Flume框架介绍

Hive部分的讲解基本上就完事了,从本章开始我们来看一下Flume框架。同样的,第一篇文章还是简单的介绍一下Flume框架。关注专栏《破茧成蝶——大数据篇》,查看更多相关的内容~


目录

一、什么是Flume

二、Flume的优点

三、Flume的架构

3.1 Event

3.2 Agent

3.3 Source

3.4 Channel

3.5 Sink

四、Flume的特点

五、Flume的拓扑结构

5.1 Flume-Agent

5.2 单Source,多Channel、Sink

5.3 负载均衡

5.4 Agent聚合


 

一、什么是Flume

Flume是一个分布式的,可靠的,可用的,非常有效率的对大数据量的日志数据进行收集、聚集、移动信息的服务。Flume仅仅运行在Linux环境下。它是一个基于流式的、数据的、非常简单的(只需要写一个配置文件)、灵活的架构,它也是一个健壮的、容错的。它用一个简单的扩展数据模型用于在线实时应用分析。它的简单表现为:写个source、channel、sink,之后一条命令就能操作成功了。通常在一个集群架构中,Flume、Kafka实时的进行数据收集,Spark,Storm实时去处理,Impala实时去查询。

二、Flume的优点

1、Flume可以和任意存储进程集成。

2、输入的的数据速率大于写入目的存储的速率,flume会进行缓冲,减小HDFS的压力。

3、Flume中的事务基于channel,使用了两个事务模型,确保消息被可靠发送。Flume使用两个独立的事务分别负责从soucrce到channel,以及从channel到sink的事件传递。一旦事务中所有的数据全部成功提交到channel,那么source才认为该数据读取完成。同理,只有成功被sink写出去的数据,才会从channel中移除。

三、Flume的架构

Flume架构如下图所示:

三十六、Flume框架介绍_第1张图片

 Flume-ng只有一个角色的节点:agent。Agent由source、channel和sink组成。

角色 简介
Source Source用于采集数据,Source是产生数据流的地方,同时Source会将产生的数据流传输到Channel中。Source输入端常见的类型有:spooling directory、exec、syslog、Avro、netcat等等。
Channel Channel连接Source和Sink,这个有点像队列。它是位于Source和Sink之间的缓冲区,Flume自带了两种Channel:Memory Channel和File Channel。Memory Channel是基于内存缓存,在不需要关心数据丢失的情况下适用。File Channel是Flume的持久化Channel,系统宕机不会丢失数据。
Sink 从Channel中收集数据,将数据写到目标源,可以是下一个Source也可以是HDFS或者HBase。Sink组件常见的目标源包括:HDFS、Kafka、Logger、Avro、File,或者是自定义目标源。

3.1 Event

Event是Flume数据传输的基本单元。Flume以事件的形式将数据从源头传送到最终的目的地。Event由可选的header和载有数据的一个byte array构成。其中,载有的数据对Flume是不透明的,Header是容纳了key-value字符串的无序集合,key在集合内是唯一的,Header可以在上下文路由中使用扩展。Source监控某个文件,将数据拿到,封装在一个event中,并put/commit(doPut:将批数据先写入临时缓冲区putList。doCommit:检查Channel内存队列是否足够合并。doRollback:Channel内存队列空间不足,回滚数据。)到channel中,channel是一个队列,队列的有点就是先进先出,放好之后尾部一个个event出来,sink主动去从channel中去拉数据(doTake:先将数据取到临时缓冲区takeList。doCommit:如果数据全部发送成功,则清除临时缓冲区的takeList。doRollback:数据发送过程中如果出现异常,rollback将临时缓冲区takeList中的数据归还给Channel内存队列。),sink再把数据写到某个地方,比如HDFS上面。

三十六、Flume框架介绍_第2张图片

3.2 Agent

 Agent是一个JVM进程,它以事件的形式将数据从源头送至目的。Agent主要有3个部分组成,Source、Channel、Sink。

3.3 Source

Source用于采集数据,Source是产生数据流的地方,同时Source会将产生的数据流传输到Channel中。Source输入端常见的类型有:avro、thrift、exec、jms、spooling directory、netcat、sequence generator、syslog、http、legacy等等。

3.4 Channel

Channel连接Source和Sink,这个有点像队列。它是位于Source和Sink之间的缓冲区,因此Channel允许Source和Sink运作在不同的速率上。Channel是线程安全的,可以同时处理几个Source的写入操作和几个Sink的读取操作。Flume自带了两种Channel:Memory Channel和File Channel。Memory Channel是基于内存缓存,在不需要关心数据丢失的情况下适用。File Channel是Flume的持久化Channel,系统宕机不会丢失数据。

3.5 Sink

Sink不断地轮询Channel中的事件且批量地移除它们,并将这些事件批量写入到存储或索引系统、或者被发送到另一个Flume Agent。Sink是完全事务性的。在从Channel批量删除数据之前,每个Sink用Channel启动一个事务。批量事件一旦成功写出到存储系统或下一个Flume Agent,Sink就利用Channel提交事务。事务一旦被提交,该Channel从自己的内部缓冲区删除事件。Sink组件目的地包括hdfs、logger、avro、thrift、ipc、file、null、HBase、solr、自定义。

四、Flume的特点

1、复杂流动性:Flume允许用户进行多级流动到最终目的地,也允许扇出流(一到多)、扇入流(多到一)的、故障转移和失败处理。2、可靠性:事务性的数据传递,保证了数据的可靠性。3、可恢复性:通道可以以内存或文件的方式实现,内存更快,但是不可恢复,而文件虽然比较慢但提供了可恢复性。

五、Flume的拓扑结构

5.1 Flume-Agent

三十六、Flume框架介绍_第3张图片

这种模式是将多个flume给顺序连接起来了,从最初的source开始到最终sink传送的目的存储系统。此模式不建议桥接过多的flume数量, flume数量过多不仅会影响传输速率,而且一旦传输过程中某个节点flume宕机,会影响整个传输系统。

5.2 单Source,多Channel、Sink

三十六、Flume框架介绍_第4张图片

Flume支持将事件流向一个或者多个目的地,这种模式将数据源复制到多个channel中,每个channel都有相同的数据,sink可以选择传送的不同的目的地。

5.3 负载均衡

三十六、Flume框架介绍_第5张图片

Flume支持使用将多个sink逻辑上分到一个sink组,Flume将数据发送到不同的sink,主要解决负载均衡和故障转移问题。

5.4 Agent聚合

三十六、Flume框架介绍_第6张图片

日常web应用通常分布在很多个服务器上,大者甚至上千个、上万个服务器。产生的日志,处理起来也非常麻烦。用Flume的这种组合方式能很好的解决这一问题,每台服务器部署一个Flume采集日志,传送到一个集中收集日志的Flume,再由此Flume上传到HDFS、Hive、Hbase、jms等,进行日志分析。

 

对于Flume的介绍就到这里吧,这个框架本身也比较简单,你们在这个过程中遇到了什么问题,欢迎留言,让我看看你们遇到了什么问题~

你可能感兴趣的:(破茧成蝶——大数据篇,大数据,flume)