Flume 日志文件/实时数据流采集框架 概念及原理介绍

技术背景

由cloudera软件公司产出的可分布式日志收集系统,
后与2009年被捐赠了apache软件基金会,为hadoop相关组件之一。
尤其近几年随着flume的不断被完善以及升级版本的逐一推出,特别是flume-ng;
同时flume内部的各种组件不断丰富,用户在开发的过程中使用的便利性得到很大的改善,现已成为apache top项目之一.

设计目的

向hadoop集群批量导入基于事件的海量数据

设计思想

用以agent代理为单位的java进程进行数据的采集

技术本质

就是由一个个持续运行的source(数据源),sink(数据目标)以及channel(用于连接source源和sink目标地的通道)构成的以agent(代理)为基本单元的 Java进程

核心特性

功能强大

  1. flume提供了大量的数据源和目标数据接口
  2. 数据源支持: socket数据包,文件,文件夹,kafka
  3. 目标数据支持: hdfs,habase,hive,kafka

定制化

  1. 可定制各类数据发送方
  2. 可定制各类数据接受方

预处理

  1. 拦截器,选择器,处理器,支持对数据做预处理

开发便捷,学习成本低

  1. flume将功能接口都做了封装,使用时直接通过采集方案配置即可

灵活度高,支持二次开发

  1. 源代码是java,开放了开发接口,支持用户自定义

实时性

  1. 数据一生成,就会被采集

稳定性

  1. flume提供了负载均衡和HA的设计,保证数据传输的安全性

组件介绍

agent

  • 概念:agent是 flume的基本工作单位,包含source,channel,sink三个组件
  • 流程:
    1.source监听数据源的变化,如果一旦产生了新的数据,就会将数据源中新产生的数据变成数据流,数据 流中每一条数据都作为一个event,将每个event发送给channel
    2.channel将source发送过来的一个个event做临时缓存,并加以自定义处理
    3.sink从每个channel中取得一个个event,然后将event中的数据写入目的地

source

  • 概念:source是 flume的数据源组件,对接各个不同的数据源,用于数据的采集。根据采集方式分为驱动型和轮询型。驱动型是外部发送数据给flume,轮询型是flume周期性主动去获取数据。source必须和一个channel关联

  • 常用类型:

  1. exec source: 将一条命令的执行结果输出作为数据源进行采集,一般与tail 动态输出文件同用
    优点:可以动态的监听日志文件的变化
    缺点:只支持监听单个文件,不支持监听多个文件
  2. spooling directory source: 监控多个文件或者一个目录,若有新的文件产生,会立马采集文件的数据
    优点: 可以监听一个目录,采集新产生的文件,可以通过正则来指定采集哪些文件,过滤加载需要的数据
    缺点: 不支持监听文件内部数据的变化
  3. taildir source: flume 1.7版本中才有,能同时监控一个目录或者多个文件,也能动态监控每个文件的 变化.还支持断点续传
  4. avro source: 数据流,遵从rpc协议的采集网络中数据的source
  5. kafka source: 用来采集kafka数据的source
  6. 还有 thrift,http,syslog,jms 类型

source 拦截器

  • 应用场景: 在source采集数据时,将每条数据变成event阶段,此时可用拦截器做相应业务处理

  • 功能:
    1.在event的header中添加keyvalue数据
    2.过滤数据,选择性采集数据

  • 常用拦截器: host interceptor, static interceptor,regex filtering interceptor

  • 自定义拦截器:
    1.外部类实现interceptor接口
    2.静态内部类实现interceptor.Builder:flume channel 先调用内部类的configure方法,再调用builder方法
    3.外部类通过构造方法 把接受的配置参数赋值自己的成员变量
    4.核心处理的逻辑是在intercept(event e)方法中实现的

channel

  • 概念:channel是flume的中间数据临时缓存组件,聚合数据,临时缓存,用于数据的中转,数据发送成功后,events移除。支持事务,提供较弱的顺序保证,可以连接多个source和sink。

  • 常用类型:

  1. memory channel: 数据临时缓存在内存中,不持久
    优点: 性能较高,速度较快,高吞吐
    缺点: 缓存数据量较少,易丢失,不可靠
  2. file channel: 数据临时缓存在文件中,基于WAL预写日志
    优点: 缓存数据量大,较安全
    缺点: 性能较差,速度慢,需要配置checkpoint目录
  3. kafka channel:数据临时缓存在kafka中
  4. jdbc channel: 只支持derby数据库,目前仅在测试阶段,event级别的持久化

channel 选择器

  • 应用场景: flume简单架构中,一个source,多个channel情况下,source应该将数据给到哪个channel,此时可使用channel选择器指定,即实现channel数据的负载均衡
  • 默认方式: 轮询策略
  • 作用: 1.可配合拦截器使用,在采集方案中指定每条event数据给哪个channel

sink

  • 概念:sink是flume的数据下沉组件,用于对接各个不同的数据目的地,用于数据的输出
  • 常用类型:
    1. logger sink: 将采集到的数据下沉到flume的日志中,一般用于测试
    2. hdfs sink: 将采集到的数据下沉到hdfs中,默认1kb一个文件,
      优点: 可以通过采集方案指定采集的文件大小(有偏差,event),生成的文件和文件夹的规则
    3. hive sink: 将数据采集到hive中,hive表必须为桶表类型,数据格式必须为orc类型
    4. file roll sink:将数据采集到本地文件系统,一般在高可用架构中,充当缓冲角色,用于本地存储备份
    5. avro sink: 通过网络发送数据
    6. kafka sink: 将数据写入kafka
    7. hbase sink:将数据写入hbase

sink 处理器

  • 应用场景: 在flume复杂架构的级联中,避免磁盘io过高,最后使用一个agent统一写入hdfs,此agent具有spof危险,processors能够实现故障转移功能,可以将多个sink封装成一个group组
  • 分类:load_balance / failover

event

  • 概念: fulme的最基本的数据单元,类似于一种数据包结构,包含header和body,header默认为空,body存放原始数据
    可以通过拦截器来设置header中的kv类型值,然后通过%{key}来获取

采集架构

  • 简单架构: 一个agent 单独工作,但是启动多个source,channel,sink完成数据采集,聚合,下沉功能
  • 复杂架构: 多个agent的级联工作,避免多个flume同时写入hdfs造成磁盘io过高,多个级联节点内数据支持复制

闲置滚动

  • 概念:flume不仅可以通过sink来指定输出文件时间,文件的大小,文件的event条数,还可以指定生成文件夹的规则,而且若文件闲置,即一段时间内没有数据进来,也可以通过hdfs.idletimeout参数开启闲置滚动,接收当前收集文件,进入到下一个收集
  • 补充:注意flume客户端会等待hdfs数据传输并备份完成,这时会造成闲置滚动参数无效问题,可以通过hdfs.minblockReplicas = 1来设置,即flume误认为hdfs副本数只需要备份一个即可

相关框架

  • flume: 日志文件,数据流
  • sqoop: 数据库
  • logstash: 日志文件,数据库,数据流
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,470评论 6 501
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,393评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,577评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,176评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,189评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,155评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,041评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,903评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,319评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,539评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,703评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,417评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,013评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,664评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,818评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,711评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,601评论 2 353

推荐阅读更多精彩内容

  • 今天感恩节哎,感谢一直在我身边的亲朋好友。感恩相遇!感恩不离不弃。 中午开了第一次的党会,身份的转变要...
    迷月闪星情阅读 10,562评论 0 11
  • 彩排完,天已黑
    刘凯书法阅读 4,209评论 1 3
  • 表情是什么,我认为表情就是表现出来的情绪。表情可以传达很多信息。高兴了当然就笑了,难过就哭了。两者是相互影响密不可...
    Persistenc_6aea阅读 124,921评论 2 7