Flume原理简单部分解析

1.Flume简介

Flume是Cloudera提供的一款高可用,可靠,分布式的海量日志采集、聚合和传输的软件。

Flume的核心功能是把数据从数据源收集过来,再将收集到的数据输送到目的地sink,为了保证整个输送过程一定成功,在输送到目的地之前会先缓存数据(channel),在数据真正到达目的地后,Flume再删除缓存。

Flume支持定制各类数据发送方,用于收集各类数据;同时支持定制各类数据接收方,用于最终存储数据,一般的数据采集需求对Flume采用简单的配置可以实现。针对特殊场合的数据采集场景具备良好的自定义扩展能力,因此Flume可以搞定大部分的数据采集场景。

当前Flume有两个版本,Flume0.9x的版本的统一称Flume OG即original generation,Flume 1.x版本的统称为Flume NG(next generation),FlumeNG相对于OG是经过了核心组件,核心配置和架构的重构,有很大的差异,使用的使用要注意,改动的另外的一个原因是Flume被纳入到apache旗下了,Cloudera Flume 变成了apache Flume了。

2.Flume结构

Flume的核心角色组件是agent,agent本身是一个java进程一般运行在日志收集节点,也可以存放在存储节点。

Flume以agent为最小的独立运行单位。一个agent就是一个JVM。它是一个完整的数据收集工具,含有三个核心组件,分别是source、 channel、 sink。通过这些组件, Event 可以从一个地方流向另一个地方,每一个agent相当于一个数据传递员,包含三个组件:
Flume原理简单部分解析_第1张图片

3.1 Source

  Source是数据的收集端,负责将数据捕获后进行特殊的格式化,将数据封装到事件(event) 里,然后将事件推入Channel中。 Flume提供了很多内置的
  Source, 支持 Avro, log4j, syslog 和 http post(body为json格式)。可以让应用程序同已有的Source直接打交道,如AvroSource,
  SyslogTcpSource。 如果内置的Source无法满足需要, Flume还支持自定义Source。
  

source类型

Spool Source 如何使用?

在实际使用的过程中,可以结合log4j使用,使用log4j的时候,将log4j的文件分割机制设为1分钟一次,将文件拷贝到spool的监控目录。

log4j有一个TimeRolling的插件,可以把log4j分割的文件到spool目录。基本实现了实时的监控。 Flume在传完文件之后,将会修改文件的后缀,变为.COMPLETED(后缀也可以在配置文件中灵活指定)

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

3.2 Channel

  Channel是连接Source和Sink的组件,大家可以将它看做一个数据的缓冲区(数据队列),它可以将事件暂存到内存中也可以持久化到本地磁盘上
  到Sink处理完该事件。介绍两个较为常用的Channel, MemoryChannel和FileChannel。
  

channel类型

  

注意:

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

6.3、Sink

3.3 Sink

  Sink从Channel中取出事件,然后将数据发到别处,可以向文件系统、数据库、 hadoop存数据, 也可以是其他agent的Source。在日志数据较少时,可
  以将数据存储在文件系统中,并且设定一定的时间间隔保存数据

sink类型

4.Flume安装部署

在每一个web服务器上面部署一个agent进程,并发的采集数据,采集的数据并没有传递给最终的数据存储系统,而是传递给了一个agent,最后再传递给最终的数据存储系统。
flume之所以能够采集各种格式的数据源,是因为flume封装了各种数据格式的插件,针对某个数据源只需要改下配置source,channel,sink插件方案即可,可以通过官网看到这些个插件。

1,上传安装包到数据源所在的节点上面或者通过网络协议从数据源节点获取数据的一个节点上面,解压
tar -zxvf apache-flume-1.6.0-bin.tar.gz
2,修改配置文件中的配置项 JAVA_HOME
3,根据采集需求配置采集方案,描述在配置文件中,指定source,channel,sink的插件类型,文件名可以自定义。一般情况下是source名称-sink名称.conf
4,指定采集方案配置文件,在相应的节点上启动 flume agent

你可能感兴趣的:(大数据,理论概念,flume)