Flume基础知识

一:简介

  1. Flume是Cloudera公司开发的后来贡献给了Apache的一套用于分布式、可靠的进行日志收集、汇聚、传输的系统

  2. Flume的版本更新缓慢但是稳定

  3. Flume的版本

    a. Flume0.9:对线程的并发和安全性支持不好

    b. Flume1.0:对并发性和安全性支持较好,并且提供了更好的分布式的扩展性

二:基本概念

  1. Event:

    a. Flume会将收集到每一条日志封装成Event对象,所以一个Event就是一条日志

    b. Event的本质是json串,即Flume将收集到的每一条日志封装成一个个的json,一个json就是一个Event

  2. Agent:是Flume的基本组成结构

    a. Source:用于从数据源来采集数据

    b. Channel:用于临时存储数据

    c. Sink:用于将数据发往目的地

三:流动模型

  1. 单级流动

    a. [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3y0DMaZb-1597989379042)(file:///C:/Users/Administrator/AppData/Local/Temp/msohtmlclip1/01/clip_image002.jpg)]

  2. 多级流动

    a. [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vpsqaWye-1597989379045)(file:///C:/Users/Administrator/AppData/Local/Temp/msohtmlclip1/01/clip_image004.jpg)]

  3. 扇入流动

    a. [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UaYqTM8b-1597989379048)(file:///C:/Users/Administrator/AppData/Local/Temp/msohtmlclip1/01/clip_image006.jpg)]

  4. 扇出流动

    a. [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Gs4AqNZT-1597989379050)(file:///C:/Users/Administrator/AppData/Local/Temp/msohtmlclip1/01/clip_image008.jpg)]

  5. 复杂流动:将上述的四种流动方式模型按照业务要求来进行组合,就构成了复杂流动

四:Source

  1. AVRO:接收被AVRO序列化之后的数据,结合AVRO sink可以实现多级、扇入、扇出等流动

  2. Exec:将一个命令的执行结果作为日志进行收集

  3. Spooling Directory:监听指定的目录,如果目录下产生了新的文件,那么会自动的收集新文件中内容

  4. Netcat:用于监听TCP请求,将TCP请求的内容作为日志进行收集

  5. Sequence Generator:序列产生器,会不断的产生自增的数字

  6. HTTP:监听HTTP请求,但是只能监听GET和POST两种请求,然而对GET请求的监听不稳定,所以在实际开发中一般只用这个source来监听POST请求、

  7. 自定义Source:

    • EventDrivenSource:事件驱动Source,被动型Source,需要自己提供线程获取和处理数据;可控性更强
    • PollableSource:拉取Source,主动型Source,已经提供了线程来获取数据,使用的时候只考虑怎么处理数据即可;可控性不强

五:Channel

  1. Memory:内存通道,这个channel是将数据临时存储在内存中,特点是读写快但是不可靠,如果考虑吞吐量,那么使用Memory Channel
    • Capacity:事件存储在信道中的最大数量,默认值是100,建议实际工作调节:10万
    • TransactionCapacity:每个事务中的最大事件数,默值是100,建议工作调节1000~3000
  2. File:文件通道,这个Channel可以将数据临时存储在硬盘中,特点是可靠但是读写速度相对较慢,如果考虑数据的稳定性,那么使用File Channel
  3. JDBC:将数据临时存储在数据库中,理论而言,读写速度要高于File Channel但是低于Memory Channel,这个Channel的特点只支持Derby,基于Derby数据库的特性在实际开发中不使用
  4. MemorySpillable:内存溢出通道,将数据临时写到内存中,如果内存中的数据量达到指定的条目数,那么不会阻塞而是把数据记录到磁盘中,但是这个通道到目前为止一直处于测试状态,一直没有投入使用,稳定性未知

六:Sink

  1. Logger:将数据以日志的形式打印到控制台上,为了防止屏幕上被日志占满,所以如果数据超过16个字节,超出的部分不会打印
  2. File_roll:将数据写到文件中,如果不指定的情况下,默认每隔30s生成一个文件存储数据,会产生大量的小文件
  3. AVRO:将数据经过AVRO序列化之后写出 ,结合AVRO Source可以实现多级、扇入、扇出等流动

七:子组件

  1. Selector:选择器
    • Selector是Source的子组件,用于决定数据的并发模式
    • 提供了两种分发模式:复制模式(replicationg)、路由模式/多路复用模式(multiplexing)
      • replicationg:当节点收到数据之后,会将数据进行复制,然后发往每一个扇出节点,此时每一个节点接受到的数据量是相同的
      • multiplexing:监听headers中指定的字段,根据值来进行分发,此时每一个节点上面接收到的数据是不同的
      • 如果不指定,Selector默认使用的是复制模式
      • 如果需要对数据进行备份,使用复制模式,如果需要对数据进行分类,那么使用路由模式
  2. Interceptor:拦截器
    • Interceptor是Source的子组件,也是Flume中唯一可以直接改变原始数据的组件
    • 不同于Selector,Interceptor可以配置多个,形成拦截器链
    • 常见子类:
      • timeStamp:会在headers中添加一个字段TimeStamp,用于标记日志被收集的时间,结合HDFS Sink,可以实现对日志进行按天存储的效果
      • host:会在headers中添加一个字段host,用于标记是被哪个节点收集的
      • static:会在headers中添加一个用户指定的字段
      • UUID:会在header中添加一个字段id,用于标记数据的唯一性
      • Search and Replace:在使用的时候需要指定正则表达式,那么符合正则表达式的数据就会被替换掉
      • Regex Filtering:如果没有指定excludeEvents属性或者该属性设置为false,那么就表示符合正则表达式的数据会被保留,如果excludeEvents为true,那么符合正则表达式的数据就会被过滤掉

八:sink processor

  1. 本质上就是sinkgroup,顾名思义可以将一个或多个sink绑定到一个组中
  2. 如果不指定,默认一个组中就只有一个sink
  3. sink processor提供了三种模式:default、failover、load balance
    • Default:默认模式,这种模式下,一个sink就是一个组
    • Failover:崩溃恢复
    • Load balance:负载均衡模式,但是flume原生的负载均衡模式并没有效果
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

夜色如墨

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值