Flume 简单理解
概述
Flume是一种分布式,可靠且可用的服务,用于有效地收集,聚合和移动大量日志数据。Flume构建在日志流之上一个简单灵活的架构。它具有可靠的可靠性机制和许多故障转移和恢复机制,具有强大的容错性。使用Flume这套架构实现对日志流数据的实时在线分析。Flume支持在日志系统中定制各类数据发送方,用于收集数据;同时,Flume提供对数据进行简单处理,并写到各种数据接受方(可定制)的能力。当前Flume有两个版本Flume 0.9X版本的统称Flume-og,Flume1.X版本的统称Flume-ng。由于Flume-ng经过重大重构,与Flume-og有很大不同,使用时请注意区分。本次课程使用的是ache-flume-1.9.0-bin.t
简介
flume 是由 cloudera 软件公司产出的可分布式日志收集系统,后与 2009 年被捐赠了 apache 软件基金会, 为hadoop 相关组件之一。
Flume 是一种分布式 , 可靠且可用的服务 , 用于高效地收集 , 汇总和移动大量日志数据 。 它具有基于流式数据流的简单而灵活的架构 。 它具有可靠的可靠性机制以及许多故障转移和恢复机制 , 具有强大的容错性和容错能力。它使用一个简单的可扩展数据模型,允许在线分析应用程序。
为什么需要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:是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的组件,可以理解为数据缓冲区(数据队列),可以将enevt暂存在内存上,也可以持久化到本地磁盘,直到Sink消费完。
Sink :数据下沉。从channel中取出数据后,分发到别的地方,比如HDFS或者HBase等,也可以是其他Agent的source。当日志数据量小的时候,可以将数据存在文件系统中,并设定一定的时间间隔来存储数据。
常见类型:HDFS、Logger、File Roll、Avro、Thrift、HBase等
多个Agent连接
如图,3个Agent连接一个Agent时,要注意的是,3个Agent中Sinks的类型需要统一,因为另一个Agent的Source类型需要统一的数据源类型来接收。
一个或者多个Agent连接就形成了流,流将数据推送到了另一个Agent,最终将数据推送到存储或者索引系统。