Flume基本原理

  • Flume概述
  • Flume的定义
  • Flume的优缺点
  • Flume的体系架构
  • Flume四种模式&拓扑结构



Flume系列Blog

Flume架构及基本原理(一)Flume配置格式(二)


Flume概述

Flume的定义

  • Flume由Cloudera公司开发,是一个分布式、高可靠、高可用的海量日志采集、聚合、传输的系统。
  • Flume支持在日志系统中定制各类数据发送方,用于采集数据;
  • Flume提供对数据进行简单处理,并写到各种数据接收方的能力。简单的说,Flume是实时采集日志的数据采集引擎。

Flume的优缺点

优点

  • 分布式:flume分布式集群部署,扩展性好
  • 可靠性好: 当节点出现故障时,日志能够被传送到其他节点上而不会丢失
  • 易用性:flume配置使用较繁琐,对使用人员专业技术要求高
  • 实时采集:flume采集流模式进行数据实时采集
  • 适用场景:适用于日志文件实时采集。

缺点

  • 无法监控文件内容的变化,只能监控文件的增加,如果修改了文件名,flume会报错。

Flume的体系架构

大数据 Flume日志采集 flume数据采集架构框架图_大数据 Flume日志采集

  • Agent本质上是一个 JVM进程,该JVM进程控制Event数据流从外部日志生产者那里传输到目的地(或者是下一个Agent)。一个完整的Agent中包含了三个组件Source、Channel和Sink,Source是指数据的来源和方式,Channel是一个数据的缓冲池,Sink定义了数据输出的方式和目的地。
  • Source是负责接收数据到Flume
    Agent的组件。Source组件可以处理各种类型、各种格式的日志数据,包括avro、exec、spooldir、netcat等。
  • Channel是位于Source和Sink之间的缓冲区。Channel允许Source和Sink运作在不同的速率上。Channel是线程安全的,可以同时处理多个Source的写入操作及多个Sink的读取操作。常用的Channel包括:
Memory Channel是内存中的队列。Memory Channel在允许数据丢失的情景下适用。如果不允许数据丢失,应该避免使用Memory Channel,因为程序死亡、机器宕机或者重启都可能会导致数据丢失;
   
   File Channel将所有事件写到磁盘。因此在程序关闭或机器宕机的情况下不会丢失数据;
  • Sink不断地轮询Channel中的事件且批量地移除它们,并将这些事件批量写入到存储或索引系统、或者被发送到另一个Flume Agent。
Sink是完全事务性的。在从Channel批量删除数据之前,每个Sink用Channel启动一个事务。批量事件一旦成功写出到存储系统或下一个Flume Agent,Sink就利用Channel提交事务。事务一旦被提交,该Channel从自己的内部缓冲区删除事件。
 
 Sink组件包括hdfs、logger、avro、file、null、HBase、消息队列等。
  • Event是Flume定义的一个数据流传输的最小单位。

Flume四种模式&拓扑结构

  • 串行模式
    这种模式是将多个 flume 顺序连接起来了,从最初的 source 开始到最终 sink 传送的目的存储系统。此模式不建议桥接过多的 flume 数量,flume 数量过多不仅会影响传输速率,而且一旦传输过程中某个节点 flume 宕机,会影响整个传输系统。
  • 大数据 Flume日志采集 flume数据采集架构框架图_数据_02

  • 聚合
    这种模式是我们最常见的,也非常实用,日常 web 应用通常分布在上百个服务器,大者甚至上千个、上万个服务器。产生的日志,处理起来也非常麻烦。
    用 flume 的这种组合方式能很好的解决这一问题,每台服务器部署一个 flume 采集日志,传送到一个集中收集日志的 flume,再由此 flume 上传到 hdfs、hive、hbase 等,进行日志分析。

大数据 Flume日志采集 flume数据采集架构框架图_大数据 Flume日志采集_03

  • 复制模式(单Souce多Channel、Sink模式)
    将事件流向一个或者多个目的地。这种模式将数据源复制到多个channel中,每个channel都有相同的数据,sink可以选择传送的不同的目的地。
  • 大数据 Flume日志采集 flume数据采集架构框架图_Memory_04

  • 负载均衡模式(单Source、Channel多Sink)
    将多个sink逻辑上分到一个sink组,flume将数据发送到不同的sink,主要解决负载均衡和故障转移问题。
  • 大数据 Flume日志采集 flume数据采集架构框架图_flume_05