1、什么是flume
flume 是由 cloudera 软件公司产出的可分布式日志收集系统,后与 2009 年被捐赠了 apache 软件基金会, 为hadoop 相关组件之一。
Flume 是一种分布式 , 可靠且可用的服务 , 用于高效地收集 , 汇总和移动大量日志数据 。 它具有基于流式数据流的简单而灵活的架构 。 它具有可靠的可靠性机制以及许多故障转移和恢复机制 , 具有强大的容错性和容错能力。它使用一个简单的可扩展数据模型,允许在线分析应用程序。
2、为什么需要flume
1、当大量的数据在同一个时间要写入HDFS时,每次一个文件被创建或者分配一个新的块,都会在namenode发生很复杂的操作,主节点压力很大,会造成很多问题,比如写入时间严重延迟、写入失败等。
2、flume是一个灵活的分布式系统,易扩展,高度可定制化。
3、flume中的核心组件Agent。一个Agent可以连接一个或者多个Agent,可以从一个或者多个Agent上收集数据。多个Agent相互连接,可以建立流作业,在Agent链上,就能将数据从一个位置移动到另一个地方(HDFS、HBase等)。
3、flume特性
Flume 是一个分布式、可靠、和高可用的海量日志采集、聚合和传输的系统。
Flume 可以采集文件,socket 数据包、文件、文件夹、kafka 等各种形式源数据,又可以将采集到的数据(下 下 沉
sink) 输出到 HDFS 、hbase 、hive 、kafka 等众多外部存储系统中
对 一般的采集需求,通过对 flume 的简单配置即可实现
Flume 针对特殊场景也具备良好的自定义扩展能力,因此,flume 可以适用于大部分的日常数据采集场景
Flume 的管道是基 于事务,保证了数据在传送和接收时的一致性.
Flume 是可靠的,容错性高的,可升级的,易管理的, 并且可定制的。
4、Flume Agent简单架构
Agent结构
Agent:Agent是Flume中的核心组件,用来收集数据。一个Agent就是一个JVM进程,它是Flume中最小的独立运行的单元。
在Agent中有三个组件,分别为Source,Channel,Sink
Flume Event
Event:在flume中,event是最小的数据单元,由header和body组成 event 是 是 flume
中处理消息的基本单元,个 由零个或者多个 header 和正文 body 组成 。 Header 是 是 key/value 形式的
, 可以用来制造路由决策或携带其他结构化信息( 如事件的时间戳或 事件来源的服务器主机名)和 。你可以把它想象成和 HTTP
头一样提供相同的功能—— 通过该方法 来传输正文之外的额外信息。 Body 是一 个字节数组 ,包含了实际的内容。 flume
提供的同 不同 source 会给其生成的 event 添加不同的 header
Source:数据源。负责将数据捕获后进行特殊的格式化,然后再封装在Event中,再将数据推入到Channel中
常见类型: :avro 、exec、 jms、spooling directory、source 、kafka 、netcat 等
Channel:连接source和sink的组件,可以理解为数据缓冲区(数据队列),可以将event暂存在内存上,也可以持久化到本地磁盘上,直到sink消费完。
常见类型:Memory、JDBC、File等
Sink:数据下沉。从channel中取出数据后,分发到别的地方,比如HDFS或者HBase等,也可以是其他Agent的source。当日志数据量小的时候,可以将数据存在文件系统中,并设定一定的时间间隔来存储数据。
常见类型:HDFS、Logger、File Roll、Avro、Thrift、HBase等
Source、Channel和Sink的类型具体说明参照官网用户指南
5、多个Agent连接
如图,3个Agent连接一个Agent时,要注意的是,3个Agent中Sinks的类型需要统一,因为另一个Agent的Source类型需要统一的数据源类型来接收。
一个或者多个Agent连接就形成了流,流将数据推送到了另一个Agent,最终将数据推送到存储或者索引系统。