前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Flume入门 | 基本概念及架构说明

Flume入门 | 基本概念及架构说明

作者头像
create17
发布2019-03-12 17:23:37
8470
发布2019-03-12 17:23:37
举报

每一个成功人士的背后,必定曾经做出过勇敢而又孤独的决定。

放弃不难,但坚持很酷~

Flume版本:1.5.2 前言

今天,给大家分享一下Flume的基础知识。本篇文章主要是对Flume的基本概念及架构进行一些说明。

一、简介

Apache Flume是一个分布式,可靠且可用的系统,可以有效地从许多不同的源收集,聚合和移动大量日志数据到集中式数据存储。

Apache Flume的使用不仅限于日志数据聚合。由于数据源是可定制的,因此Flume可用于传输大量事件数据,包括但不限于网络流量数据,社交媒体生成的数据,电子邮件消息以及几乎任何可能的数据源。

二、优势

  • Flume可以将应用产生的数据存储到任何集中存储器中,比如HDFS,Hive,HBase。
  • 当收集数据的速度超过将写入数据的时候,也就是当收集信息遇到峰值时,这时候收集的信息非常大,甚至超过了系统的写入数据能力,这时候,Flume会在数据生产者和数据收容器间做出调整,保证其能够在两者之间提供一共平稳的数据。
  • Flume的Channel是基于事务,保证了数据在传送和接收时的一致性
  • Flume是可靠的,容错性高的,可升级的,易管理的,并且可定制的。
  • 支持各种接入资源数据的类型以及接出数据类型。
  • 支持多路径流量,多管道接入流量,多管道接出流量,上下文路由等。
  • 可以被水平扩展。

三、组成架构

Flume组成架构如下图所示:

Flume组成架构

Web Server为例,当作数据源,Source接收数据源,流向Channel作为临时缓冲,Sink不断地抽取Channel里面的数据,并将数据发送到存储(比如:HDFS文件系统)、索引系统,或者被发送到另一个Flume Agent。

Flume组成架构详解如下图所示:

架构详解--来源于自尚学堂教育

该图分为三个部分:数据输入端(例如Web Server)、Flume流式处理(Agent)、数据输出端(例如HDFS、Kafka、File等)。

接下来说一说Flume相关的基本概念。

Agent

Agent是一个JVM进程,它以事件的形式将数据从源头送至目的地。Agent主要有三个部分组成:Source、Channel、Sink。

Event

Flume数据传输的基本单元,带有一个可选的消息头。如果是文本文件,通常是一行记录。Event从Source,流向Channel,再到Sink,Sink将数据写入目的地。

Source

Source是负责接收数据到Flume Agent的组件。Source组件可以处理各种类型、各种格式的日志数据,包括Avro Source、Exce Source、Spooling Directory Source、NetCat Source、Syslog Sources、Thrift Source、Sequence Generator Source、HTTP Source、Kafka Source等。

Channel

Channel主要提供一个队列的功能,是位于Source和Sink之间的缓冲区。Source到Channel是完全事务性的,一旦事务中的所有事件全部传递到Channel且提交成功,那么Source就将其标记为完成。如果因为某种原因事件传递失败,那么事务将会回滚。

Flume对于Channel,则提供了Memory Channel、File Channel、JDBC Channel、Kafka Channel以及自定义Channel等。

  • Memory Channel是内存中的队列。Memory Channel在不需要关心数据丢失的情境下适用。如果需要关心数据丢失,那么就不应该使用Memory Channel。因为程序死亡或机器宕机都会导致数据丢失。
  • File Channel将所有事件写到磁盘。因此在程序关闭或机器宕机的情况下不会丢失数据。

Sink

Sink不断地轮询Channel中的事件且批量地移除它们,并将这些事件批量写入到存储或索引系统、或者被发送到另一个Flume Agent。

Channel到Sink是完全事务性的。在从Channel批量删除数据之前,每个Sink用Channel启动一个事务,批量事件一旦成功写出到存储系统或下一个Flume Agent,Sink就利用Channel提交事务。事务一旦被提交,该Channel从自己的内部缓冲区删除事件。

Flume Sink包括HDFS Sink、Logger Sink、Avro Sink、Thrift Sink、File Roll Sink、Null Sink、Hive Sink、HBase Sink、Elasticsearch Sink、Kafka Sink以及自定义Sink。

Flume支持事务,分为Put事务与Take事务

Put事务:

从Source到Channel的事件传输过程叫Put事务。通过doPut将批数据先写入临时缓冲区putList;再通过doCommit将批数据提交给Channel,会检查channel内存队列是否足够合并,如果Channel内存队列空间不足,则回滚数据。

Take事务:

从Channel拉取事件数据到Sink的过程叫Take事务。通过doTake先将数据取到临时缓冲区takeList;再通过doCommit将事件数据发送到Sink。如果数据全部发送数据成功,则清除临时缓冲区takeList。如果数据发送过程中出现异常,rollback将临时缓冲区takeList中的数据归还给channel内存序列。

四、拓扑结构

本章节简要介绍一下Flume的拓扑结构,其中有多种Flume Agent的组合方式。

1. 多Agent连接

为了连接多个agent,前一个Agent的Sink和当前Agent的Source需要是avro类型,Sink指向Source的主机名(或IP地址)和端口。如下图所示:

多Agent连接

2. 单Source,多Channel、Sink

单Source,多Channel、Sink

单个Source,可以并行配置多个Channel,Sink与Channel一一对应,通过不同的Sink将数据发送到不同的地方,比如HDFS或JMS,甚至也可以发送到下一个Agent。

Source接收到的数据可以复制为三份,分别发送到Channel1、2、3,只不过后面的Sink不同。这种场景比如:读取一个日志文件,一份要交给Hadoop离线处理,一份相同的交给Spark实时处理。

也可以选择性地控制Source端数据,这样叫做拦截器。比如日志数据,类型有启动日志、报错日志、点击流日志。拦截器可通过判断数据的header,来分析数据的类型,然后分类型的发往不同的地方(Channel1、2、3)。

3. 负载均衡模式

负载均衡模式

上图使用多个Sink进行负载均衡。一个Agent有三个Sink,三个Sink分别指向不同的Agent。这种结构在大数据领域中经常使用,适用于大容量的数据。将很大的数据拆成多个Agent来处理。当然这两种Agent的配置不太一样。第一层Agent需要的内存(比如10G)要远大于第二层Agent的内存(比如2G)。

将大规模数据进行负载均衡,传输到HDFS进行存储。

4. 聚合模式

聚合模式

这种模式的设计针对的是集群。比如,正常的大数据服务不可能是单个服务器,几乎都是集群。那么每个集群都会产生日志文件,为了将每个日志文件进行收集,就采用这种聚合模式。

这可以通过使用avro sink配置多个第一层agents在Flume中实现,所有这些agnet都指向单个agent的avro source(同样,您可以在这种情况下使用thrift sources/sinks/clients)。第二层agent上的resource将接收的事件合并到单个channel中,该channel由sink消费到其最终目的地。

五、总结

本文主要对Flume的组成架构进行描述,以及罗列了Flume常用的拓扑结构。更多资料请参考官方文档: http://flume.apache.org/releases/content/1.9.0/FlumeUserGuide.html


本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-03-10,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 大数据实战演练 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、简介
  • 二、优势
  • 三、组成架构
  • 四、拓扑结构
    • 1. 多Agent连接
      • 3. 负载均衡模式
        • 4. 聚合模式
        • 五、总结
        相关产品与服务
        负载均衡
        负载均衡(Cloud Load Balancer,CLB)提供安全快捷的流量分发服务,访问流量经由 CLB 可以自动分配到云中的多台后端服务器上,扩展系统的服务能力并消除单点故障。负载均衡支持亿级连接和千万级并发,可轻松应对大流量访问,满足业务需求。
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档