大数据-初识flume

flume概述

  • flume百度百科
  • flume 是 Cloudera 提供的一个高可用的,高可靠的,分布式的海量日志采集.聚合和传输系统,基于流式架构,灵活简单

flume基础架构

在这里插入图片描述

  • agent
    agent是一个JVM进程,它以事件的形式将数据从源头送到目的地,主要由 source channel sink 三部分组成

  • source
    source 是负责接收数据到flume agent 的组件,source 组件可以处理各种类型,各种格式的日志数据,包括avro,thrift,exec,jms,spooling directory, netcat , sequence generator,syslog,http,legacy

  • sink
    sink不断的轮询 channel 中的事件且批量的移除他们,并将这些事件批量写入到存储或者索引系统,或者被发送到另一个flume agent.
    sink组件的目的地包括 HDFS,logger,avro,thrift,ipc,file,Hbase,solr,自定义

  • channel
    channel 是位于source 和 sink 之间的缓冲区,因此,channel 允许source 和 sink 运行在不同的速率上,channel 是线程安全的,可以同时处理几个source 的写入操作和几个 sink 的读取操作.
    flume的channel: Memory Channel , File Channel, Kafka Channel
    Memory Channel 是内存中的队列,Memory Channel 在不需要关心数据丢失的情景下适用,如果需要关心数据丢失,那么Memory Channel 就不适合使用,因为程序死亡,机器宕机或者机器重启都会导致数据丢失.File Channel 将所有的事件写到磁盘,因此在程序关闭或者机器宕机的情况下不会丢失数据.

  • Event
    传输单元中,event 是Flume数据传输的基本单元,以event 的形式将数据从源头送到目的地,event 由Header 和 Body 两部分组成,Header 用来存放该event 的一些属性,Body存放数据.

flume 细节

  • flume事务
    (1) put 事务
    ① doPut: 将批数据先写入临时缓冲区putList
    ② doCommit: 检查channel内存队列是否足够合并
    ③ doRollback: channel 内存队列空间不足,回滚数据
    (2) take 事务
    ① doTake: 将数据渠道临时缓冲区takeList,并将数据发送到目的地
    ② doCommit: 如果数据全部发送成功,则清除临时缓冲区takeList
    ③ doRollback: 数据发送过程中如果发生异常,rollback 将临时缓冲区takeList 中的数据归还给channel 内存队列
  • flume的agent
    在这里插入图片描述
    (1) source采集数据,将数据封装成Event对象,然后将数据交给Channel Processor
    (2) Channel Processor 将Event 事件传递给拦截器链(Interceptor),然后将数据返回给 Channel Processor
    (3) 然后Channel Processor 将拦截过滤后的Event事件传递给Channel 选择器(Channel Selector),然后 Channel Selector 返回给 Channel Processor 写入event事件的Channel 列表.
    Channel Selector 有两种类型,分别为 Replicating Channel Selector(默认的) 和 Multiplexing Channel Selector.
    ① Replicating Channel Selector: 将source过来的events发送到所有的Channel(相当于复制多份)
    ② Multiplexing Channel Selector: 可以配置source发过来的events具体发往哪些Channel
    (4) Channel Processor根据Channel选择器的选择结果,将Event事件写入响应的Channel
    (5) SinkProcessor启动sink,sink不断到channel中去轮询,将channel中的event事件取出来.SinkProcessor有三种:
    ① DefaultSinkProcessor: 对应单个sink
    ② LoadBalancingSinkProcessor: 对应的是sink group,可以实现负载均衡的功能
    ③ FailoverSinkProcessor: 容灾恢复,实现故障转移的功能
  • flume 拓扑结构
    (1) 简单串联
    在这里插入图片描述
    将多个flume顺序连接,此模式不建议桥接过多的flume数量,flume数量过多会影响传输效率,而且传输过程中某个节点flume宕机,会影响整个传输系统
    (2) 复制和多路复用
    在这里插入图片描述
    flume支持将事件流向一个或者多个目的地,这种模式可以将相同的数据复制到多个channel中,或者将不同数据分发到不同的channel中,sink可以选择传送到不同的目的地
    (3) 负载均衡和故障转移
    在这里插入图片描述
    将多个sink逻辑上分到一个sink组里,sink组配合配合不同的SinkProcessor可以实现负载均衡和错误恢复的功能
    (4) 聚合
    在这里插入图片描述
    将不同来源的数据集中到一个flume上,然后发送到目的地
  • 自定义拦截器Interceptor
    (1) 引入依赖 flume-ng-core
    (2) 定义类实现Interceptor接口,重写方法
  • 自定义source
    (1) 继承AbstractSource 类并实现Configurable和 PollableSource接口
    (2) 实现相应的方法,config方法初始化context,读取配置文件内容,process方法获取数据封装成event并写入channel,这个方法将被循环调用
  • 自定义sink
    (1) 继承AbstractSink 类并实现Configurable接口,实现configure方法,初始化context,读取配置文件内容,process方法,从channel读取数据event,将被循环调用
©️2020 CSDN 皮肤主题: 书香水墨 设计师:CSDN官方博客 返回首页