前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >浅谈Flume

浅谈Flume

作者头像
搬砖俱乐部
发布2019-12-02 21:37:09
7890
发布2019-12-02 21:37:09
举报
文章被收录于专栏:BanzClubBanzClub

Flume是一个高可用的,高可靠的,分布式的海量日志采集、聚合和传输的系统。

01

概述

记得我们之前接到的一个需求是,要根据线上的一些客户数据进行报表分析,但这些数据在系统设计时没有进行统一的表结构设计,数据只存在系统日志中,而这些数据只用于汇报报表使用也没有特别“重”的实际业务流程的需要,因此我们当时采用了python来实时抓取日志,过滤之后存储到MySQL数据库中,来进行每日的报表汇报。这种只是日志分析需求的一个业务场景。由于行业的发展,现在很多公司的业务都会有基于日志分析数据的需求。今天要说的Flume正是基于这种场景设计的一个日志采集框架,当然他不仅仅可以从日志文件中提取信息,还可以从多种源(Source)来提取分析需要的信息,再写到不同的目标地(Sink)中,可以是文件,也可以是分布式文件系统(HDFS或者HBase)中,或者通过RPC、HTTP写到网络进程中。

02

Flume架构

Flume最简单的部署单元叫做Flume Agent,包括三个主要组件:Source、Channel、Sink;

  • Source:Source负责获取事件到Flume Agent,即从产生数据的应用中接收数据的组件;
  • Channel:Channel像一个缓冲队列,负责与Source相连,Source将接受到的数据写入Channel;
  • Sink:Sink负责轮询Channel,并转发走其中的事件到下一个数据目的地,可以是HDFS、HBase,也可以是下一个Flume Agent;

Source组件提供了针对不同的源接收数据,包括从网络(Avro源、HTTP源)、消息队列等,还可以直接定义Linux的执行命令如tail,cat等命令作为源。Channel也提供持久存储或者内存两种方式,这些选择还需要具体看实际使用场景的需要。Sink也支持多种不同的数据目的地配置,如:HDFS、HBase、网络等。

Flume本身并不限制Agent中的Source、Channel、Sink数量,因此Flume支持将Source中的数据复制到多个目的地。通常,一个Source可以对应多个Channel,一个Channel对应一个Sink,当然允许多个Sink对应一个Channel,Flume可以保证只有一个Sink会从Sink中读取一个特定的事件(这里的事件就是数据)。Sink有组的概念,可以将多个Sink编入同一组内,组内可以设置不同的优先级,根据优先级高低来消费Channel中的数据。

以上是几种Flume的架构方式,在大型的数据处理系统架构内,总会有一些数据采集的系统,通过采集、传输、聚合等方式,使这些数据在这些系统内“流动”起来,当简单方式就是采集完数据直接进入到存储目的地,不过,当系统出现瓶颈时,往往我们需要将数据流先缓冲起来,以匹配下游系统的处理瓶颈,这这里面我们可以用复杂的组合方式来组装数据的流动管道,如Flume的Sink下沉到消息队列等方式,一方面保证数据在管道内不丢失,一方面不会将下游的存储出现性能瓶颈。这样我们就可以通过扩展消息队列,来解决数据缓冲层的瓶颈。而且数据采集支持负载均衡配置方式,来扩展当数据量增加时的压力。

Flume其他可选配置

  • 拦截器
    • 拦截器是简单的插件式组件,设置在Source和Source写入到Channel之间,用于不同数据的预处理,像转换、删除事件。
  • Sink组
    • Flume提供一种Sink组的概念,每个Sink组包含任意数量的Sink,在Sink组实现负载均衡和故障转移。

构建FLume时的几个关键点

  • Channel容量大小
  • 整个数据采集系统分为多少层级,考虑Sink下游故障下,用什么方案继续缓冲数据
  • 如何监控Flume运行情况,包括部署Agent的JVM内存、流量
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-11-22,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 BanzClub 微信公众号,前往查看

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
TDSQL MySQL 版
TDSQL MySQL 版(TDSQL for MySQL)是腾讯打造的一款分布式数据库产品,具备强一致高可用、全球部署架构、分布式水平扩展、高性能、企业级安全等特性,同时提供智能 DBA、自动化运营、监控告警等配套设施,为客户提供完整的分布式数据库解决方案。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档