大数据系列(五)之 Flume 数据传输

目录

一、Flume简介

二、Flume架构

2.1 Flume基本组件

2.2 Flume常见数据流模型


一、Flume简介

Flume是一个分布式的,可靠的,高可用的海量日志采集,聚合和传输的系统。它也是Hadoop生态圈中的关键组件之一。

Flume通过可扩展,插件化,组合式,高可用,高容错的设计模式,为用户提供了高效准确的轻量化大数据采集工具。

Flume可以通过简单的配置,收集不同数据源的海量数据,并将数据准确,高效的传入到不同中心存储里面。目前Flume可以对接主流的大数据框架有,Hadoop,Kafka,Spark等。

在使用Flume的过程中,通过配置文件就可以实现整个数据收集过程的负载均衡和故障转移,整个流程不需要修改Flume的任何代码。Flume具有的这些优良的特性,得益于它优秀的架构设计。

Apache 官方的简介

Apache Flume是一个分布式,可靠且可用的系统,用于有效地收集,聚合大量日志数据并将其从许多不同的源移动到集中式数据存储中。

Apache Flume的使用不仅限于日志数据聚合。由于数据源是可定制的,因此Flume可用于传输大量事件数据,包括但不限于网络流量数据,社交媒体生成的数据,电子邮件消息以及几乎所有可能的数据源。

Apache Flume是Apache Software Foundation的顶级项目。

二、Flume架构

Flume事件定义为具有字节有效负载和可选字符串属性集的数据流单位。Flume是使用Java开发的,它的代理是一个(JVM)进程,承载了组件,事件通过这些组件从外部源流到下一个目标(hop)。

2.1 Flume基本组件

Event:数据消息的基本单位,有header(键值对)和body(字节数组)组成。

Agent:Flume 运行的核心是 Agent。Flume以agent为最小的独立运行单位。一个agent就是一个JVM。它是一个完整的数据收集工具,含有三个核心组件,分别是source、 channel、 sink。通过这些组件, Event 可以从一个地方流向另一个地方

一个Agent包括Source、Channel和Sink,还有一些可选的组件(稍后会介绍),如下图所示。

Source : 从外部来源读取Event,并写入到Channel当中。

Channel : Event临时存储组件,Source写入后,Event将会一直保存,直到被Sink成功消费。

Sink :从Channel读取Event,并写入目的地。

大数据系列(五)之 Flume 数据传输

其实在Agent里面我们还可以配置三个可选的组件,分别是Interceptor(拦截器),Selector(选择器),SinkProcessor(event处理器)。

Interceptor(拦截器):可以处理Event中的header信息,可以在Header中添加消息处理的时间戳,还可以添加主机名称,还有一些静态值,也可以根据正则表达式对Event进行过滤,选择那些Event可以继续向后进行传输,也可以决定哪些Event被删除,停止向后传输。Interceptor可以配置多个,多个Interceptor可以顺序执行

Selector(选择器):Interceptor处理完Event之后会传输给Selector(选择器)。选择器的作用是选择哪种方式把Event写入到Channel当中。

SinkProcessor(event处理器):当Sink从Channel中消费消息之前,可以选择SinkProcessor(event处理器),根据配置可以选择使用故障转移处理器或者负载均衡处理器。然后进Sink消费消息。

2.2 Flume常见数据流模型

2.2.1 基本数据流模型:Flume启动一个Agent,通过Source从外部数据源(如Web服务器)对数据消息(Event)进行采集,然后放在Channel当中临时存储,由Sink从Channel里面进行消费消息,写入到HDFS里面进行持久化存储。

 

大数据系列(五)之 Flume 数据传输

2.2.2 日志收集中的一种非常常见的情况是,大量的日志生成,客户端将数据发送到连接存储子系统的几个消费者代理。例如,从数百台Web服务器收集的日志发送到许多写入HDFS群集的代理。其中用到的主要架构是多级的Flume流:如下图所示

大数据系列(五)之 Flume 数据传输

下面我们举个例子来说明生产中常见的使用场景:

说明:收集多个节点的服务器数据,然后进行汇总,汇总之后再进行持久化存储。(如下图所示)

有三个WebServer服务器分别产生数据,针对这三台服务器分别启动三个Agent,Agent1,Agent2,Agent3对应三个WebServer,每个Agent负责收集对应服务器产生的数据消息(Event),收集完之后,这三个Agent再Sink阶段,都把数据发送到了Agent4,Agent4的作用是负责收集其他三个Agent输出的数据,并把收集到的所有数据写入到HDFS当中。

这里我们看出,Agent不仅可以和外部的数据源和外部的存储机制进行连接,在多个Agent之间也是可以进行连接的,可以根据不同的使用场景对Agent进行灵活的组合。

大数据系列(五)之 Flume 数据传输

2.2.3 多级流:Flume还支持将Event流复用到一个或多个目的地。这是通过定义一种流多路复用器来实现的,该流多路复用器可以将Event复制或选择性地路由到一个或多个通道。

这个数据流是将不同类型的数据流写入到不同的Channel当中,然后不通的Channel对应的Sink将收集到的数据消息(Event)输出到不同的目的地。

大数据系列(五)之 Flume 数据传输

 

 

大数据系列的其他文章:

大数据系列(一)之 ZooKeeper 分布式协调服务

大数据系列(二)之 hdfs 分布式文件系统详解

大数据系列(三)之 Yarn 资源调度框架详解

大数据系列(四)之 MapReduce过程及shuffle详解

 


附上:Flume官方文档:http://archive.cloudera.com/cdh5/cdh/5/flume-ng-1.5.0-cdh5.3.6/FlumeUserGuide.html