Flume简介与基础原理

随着大数据、云计算、PaaS平台的普及,虚拟化、容器化等技术的应用,越来越多的服务部署在云端。但是云端的服务不是物理的固定资源,以往通过SSH登陆或FTP获取的方式,就不再适用了。在这种场景下,需要一款海量日志数据高效采集、聚合、传输的服务。

Flume简介

Flume是Cloudera提供的一个高可用的,高可靠的,分布式的海量日志采集、聚合和传输的系统。支持在系统中定制各类数据发送方,用于有效收集流式数据;同时,Flume提供对数据进行简单处理,并写到各种数据接受方(可定制)的能力。抽象来讲,Flume就像一个水槽,从各种水龙头接收各种液体,然后输送到指定区域。

Flume由Cloudera于2009年7月开源,目前是Apache的顶级项目。同Flume相似的日志收集系统还有Facebook Scribe、Apache Chuwka等。

Flume发展历程

Flume的发展经历了两代,第一代指0.9.X版本,即Flume OG(Original Generation),其具体代码工程臃肿、核心组件设计不合理、核心配置不标准等缺点。第二代指1.x版本,即Flume NG(Next Generation),重构了核心组件、核心配置及代码架构,重构后的Flume 纳入Apache 旗下。Cloudera Flume 更名为 Apache Flume。

Flume主要发展历程

以下主要针对Flume NG进行介绍。

Flume优势点

1、可靠性:节点出现故障时,日志能够被传送到其他节点上而不会丢失。此外,进入数据速率大于写出速率,可以起到缓存作用,保证流的平稳。

2、可管理性:所有agent和colletor由master统一管理,这使得系统便于维护。

3、架构&功能可扩展性:架构可扩展性:指采用了三层架构,agent,collector和storage,每一层均可以水平扩展。且master允许有多个(使用ZooKeeper进行管理和负载均衡),这就避免了单点故障问题。功能可扩展性:Flume自带了很多组件,用户可添加自己的Agent(如File、Syslog等)、Collector或Storage(如File、HDFS等)。

4、存储便利性:数据可存储到任何集中存储器中,如:HDFS、HBase

5、多源支持:支持各种接入资源数据的类型以及接出数据类型

6、数据一致性:基于事务型的管道,保证了数据在传送和接收时的一致性

Flume适用场景

1、日志收集:Flume支持在日志系统中定制各类数据发送方,有效收集数据。

2、数据处理:Flume提供对数据进行简单处理,并写到各种数据接受方(可定制)。

Flume架构原理

Flume采用了分层架构,分别为Agent、Collector和Storage。其中,Agent和Collector均由Source和Sink两部分组成,Source是数据来源,Sink是数据去向。



Flume架构图


Flume的一些核心概念:

Client:生产数据,将其发送到Flume Agent。

Agent:一个独立的Flume进程,包含组件Source、Channel、Sink。

Event:数据传输的基本单元,带有一个可选的消息头。

Source:收集数据。从Client收集数据,接收event,传递给一个或多个Channel。数据源可以是监听的网络端口、本地文件系统、Kafka消息等。支持类型包括:Avro Source、Thrift Source、Exec Source、JMS Source、Spooling Directory Source、Kafka Source、NetCat Source、Sequence Generator Source、Syslog Source、HTTP Source、Stress Source、Legacy Source、Custom Source、Scribe Source以及Twitter 1% firehose Source。

Channel:缓存数据。中转Event的临时存储,当sink从channel中成功取走数据,event将会被从channel中移除。支持类型包括:Memory Channel、JDBC Channel、Kafka Channel、File Channel、Spillable Memory Channel、Pseudo Transaction Channel、Custom Channel。

Sink:输出数据。消费channel中的数据,将数据发送至下一跳或者最终目的地,如将数据写入到HDFS或HBase中。支持类型包括:HDFS Sink、Hive Sink、Logger Sink、Avro Sink、Thrift Sink、IRC Sink、File Roll Sink、Null Sink、HBase Sink、Async HBase Sink、Morphline Solr Sink、Elastic Search Sink、Kite Dataset Sink、Kafka Sink、Custom Sink。

Source、Channel、Sink三者之间的具体关系如下图所示。Source和Channel是多对多的关系,即一个Source可以写入多个Channel,多个Source也可以写入一个Channel。Sink与Channel是一对多的关系,即一个Sink只能从一个Channel里读取事件,但多个Sink也可以从一个Channel里读取事件。


Flume数据流关系

你可能感兴趣的:(Flume简介与基础原理)