Apache Flume是一个分布式的、可靠和易用的日志收集系统,用于将大量日志数据从许多不同的源进行收集、聚合,最终移动到一个集中的数据中心进行存储。Flume的使用不仅仅限于日志数据聚合,由于数据源是可定制的,Flume可以用于传输大量数据,包括但不限于网络流量数据、社交媒体生成的数据、电子邮件消息和几乎所有可能的数据源。
架构原理
Flume中最小的独立运行单位是Agent,Agent是一个JVM进程,运行在日志收集节点(服务器节点),其包含三个组件——Source(源)、Channel(通道)和Sink(接收地)。数据可以从外部数据源流入到这些组件,然后再输出到目的地。一个Flume单节点架构如图
Flume中传输数据的基本单位是event(如果是文本文件,通常是一行记录),event包括event头(headers)和event体(body),event头是一些key-value键值对,存储在Map集合中,就好比HTTP的头信息,用于传递与体不同的额外信息。event体为一个字节数组,存储实际要传递的数据。event的结构如图
event从Source流向Channel,再流向Sink,最终输出到目的地。event的数据流向如图
- Source用于消费外部数据源中的数据(event,例如Web系统产生的日志),一个外部数据源(如Web服务器)可以以Source识别的格式向Source发送数据。
- Channel用于存储Source传入的数据,当这些数据被Sink消费后则会自动删除。
- Sink用于消费Channel中的数据,然后将其存放进外部持久化的文件系统中(例如HDFS、HBase和Hive等)。
Flume可以在一个配置文件中指定一个或者多个Agent,每个Agent都需要指定Source、Channel和Sink三个组件以及他们的绑定关系,从而形成一个完整的数据流。
Source、Channel和Sink根据功能的不同有不同的类型,Source组件根据数据源的不同,常用类型与描述如表
Channel组件根据存储方式的不同,常用类型与描述如表
ink组件根据输出目的地的不同,常用类型与描述如表
Flume除了可以单节点直接采集数据外,也提供了多节点共同采集数据的功能,多个Agent位于不同的服务器上,每个Agent的Avro Sink将数据输出到了另一台服务器上的同一个Avro Source进行汇总,最终将数据输出到了HDFS文件系统中
标签:Flume,数据源,Hadoop,Source,进级,Sink,event,Channel From: https://www.cnblogs.com/hefeng2014/p/17981990来源:
作者:孙俊伟
微 信 名称:编程树
微 信 号:yuzhiyin1856