Flume 应用场景及架构原理

举报
Smy1121 发表于 2019/06/21 15:11:57 2019/06/21
【摘要】 Flume是一个分布式、可靠、和高可用的海量日志聚合的系统,支持在系统中定制各类数据发送方,用于收集数据;同时,Flume提供对数据进行简单处理,并写到各种数据接受方(可定制)的能力。

Flume 是什么?

Flume是一个分布式、可靠、和高可用的海量日志聚合的系统,支持在系统中定制各类数据发送方,用于收集数据;同时,Flume提供对数据进行简单处理,并写到各种数据接受方(可定制)的能力。


Flume 特点

1、可靠性

当节点出现故障时,日志能够被传送到其他节点上而不会丢失。Flume提供了三种级别的可靠性保障,从强到弱依次分别为:end-to-end(收到数据agent首先将event写到磁盘上,当数据传送成功后,再删除;如果数据发送失败,可以重新发送。),Store on failure(这也是scribe采用的策略,当数据接收方crash时,将数据写到本地,待恢复后,继续发送),Best effort(数据发送到接收方后,不会进行确认)。


2、可扩展性

Flume采用了三层架构,分别为agent,collector和storage,每一层均可以水平扩展。其中,所有agent和collector由master统一管理,这使得系统容易监控和维护,且master允许有多个(使用ZooKeeper进行管理和负载均衡),这就避免了单点故障问题。


3、可管理性

所有agent和colletor由master统一管理,这使得系统便于维护。多master情况,Flume利用ZooKeeper和gossip,保证动态配置数据的一致性。用户可以在master上查看各个数据源或者数据流执行情况,且可以对各个数据源配置和动态加载。Flume提供了web 和shell script command两种形式对数据流进行管理。


4、功能可扩展性

用户可以根据需要添加自己的agent,collector或者storage。此外,Flume自带了很多组件,包括各种agent(file, syslog等),collector和storage(file,HDFS等)。


5、文档丰富,社区活跃

Flume 已经成为 Hadoop 生态系统的标配,它的文档比较丰富,社区比较活跃,方便我们学习。


Flume OG 与 Flume NG 的对比

1、Flume OG

Flume OG:Flume original generation 即Flume 0.9.x版本,它由agent、collector、master等组件构成。


2、Flume NG

Flume NG:Flume next generation ,即Flume 1.x版本,它由Agent、Client等组件构成。


3、Flume NG版本的优点

1)相对于Flume OG版本,Flume NG版本代码比较简单。

2)相对于Flume OG版本,Flume NG版本架构简洁。


接下来我们重点讲解 Flume NG。

   

Flume NG基本架构

Flume NG是一个分布式、可靠、可用的系统,它能够将不同数据源的海量日志数据进行高效收集、聚合、移动,最后存储到一个中心化数据存储系统中。由原来的Flume OG到现在的Flume NG,进行了架构重构,并且现在NG版本完全不兼容原来的OG版本。经过架构重构后,Flume NG更像是一个轻量的小工具,非常简单,容易适应各种方式日志收集,并支持failover和负载均衡。


Flume NG 的架构图如下所示:

image.png


Flume NG核心概念

Flume的架构主要有一下几个核心概念:

1、Event:一个数据单元,带有一个可选的消息头。

2、Flow:Event从源点到达目的点的迁移的抽象。

3、Client:操作位于源点处的Event,将其发送到Flume Agent。

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

5、Source:用来消费传递到该组件的Event。

6、Channel:中转Event的一个临时存储,保存有Source组件传递过来的Event。

7、Sink:从Channel中读取并移除Event,将Event传递到Flow Pipeline中的下一个Agent(如果有的话)


下面我们分别介绍以上几个核心的概念:

Event

1、Event 是Flume数据传输的基本单元。

2、Flume 以事件的形式将数据从源头传输到最终的目的。

3、Event 由可选的header和载有数据的一个byte array构成。


1)载有的数据对Flume是不透明的。

2)Header 是容纳了key-value字符串对的无序集合,key在集合内是唯一的。

3)Header 可以在上下文路由中使用扩展。


Client

1、Client 是一个将原始log包装成events并且发送它们到一个或者多个agent的实体。

2、Client 在Flume的拓扑结构中不是必须的,它的目的是从数据源系统中解耦Flume


Agent

1、一个Agent包含Source、Channel、Sink和其他组件。

2、它利用这些组件将events从一个节点传输到另一个节点或最终目的地。

3、agent是Flume流的基础部分。

4、Flume 为这些组件提供了配置、生命周期管理、监控支持。


Agent之Source

image.png

1、Source负责接收event或通过特殊机制产生event,并将events批量的放到一个或多个Channel。

2、Source包含event驱动和轮询两种类型。

3、Source 有不同的类型。

1)与系统集成的Source:Syslog,NetCat。

2)自动生成事件的Source:Exec

3)用于Agent和Agent之间的通信的IPC Source:Avro、Thrift。


4、Source必须至少和一个Channel关联。


Agent之Channel与Sink

image.png


Agent之Channel

1、Channel位于Source和Sink之间,用于缓存进来的event。

2、当Sink成功的将event发送到下一跳的Channel或最终目的地,event才Channel中移除。

3、不同的Channel提供的持久化水平也是不一样的:

1)Memory Channel:volatile。

2)File Channel:基于WAL实现。

3)JDBC Channel:基于嵌入Database实现。


4、Channel支持事物,提供较弱的顺序保证。

5、Channel可以和任何数量的Source和Sink工作。


Agent之Sink

1、Sink负责将event传输到下一跳或最终目的,成功完成后将event从Channel移除。

2、有不同类型的Sink:

1)存储event到最终目的的终端Sink。比如HDFS,HBase。

2)自动消耗的Sink。比如:Null Sink。

3)用于Agent间通信的IPC sink:Avro。


3、Sink必须作用于一个确切的Channel。


【版权声明】本文为华为云社区用户原创内容,未经允许不得转载,如需转载请自行联系原作者进行授权。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。