1. 基础知识

Flume1:基础知识、Agent架构、Channel/Sink传输拦截器与Put/Take传输事务控制

      flume是一个实时数据采集工具,可以从各种各样的数据源(服务器)上采集用户行为、事件日志数据集中传输(汇聚)到大数据生态的各种存储平台中(hdfs,hbase,hive,kafka)

1.1 flume的优势:

  1. 可以高速采集数据,采集的数据能够以想要的文件格式及压缩方式存储在hdfs上
  2. 事务功能保证了数据在采集的过程中数据不丢失
  3. 部分Source保证了Flume挂了以后重启依旧能够继续在上一次采集点采集数据,真正做到数据零丢失

1.2 flume的组成

  • flume有3大组件
  1. source(源端数据采集):Flume提供了各种各样的Source、同时还提供了自定义的Source
  2. Channel(临时存储聚合数据):主要用的是memory channel和File channel(生产最常用),生产中channel的数据一定是要监控的,防止sink挂了,撑爆channel
  3. Sink(移动数据到目标端):如HDFS、KAFKA、DB以及自定义的sink

1.3 Agent配置

  1. Flume的使用其实就是Source、Channel、Sink的配置
  2. Agent=Source+Channel+Sink,其实agent就是Flume的配置文件
  3. 一个配置文件可以配置多个Agent的。
  4. Event:Flume数据传输的最小单位,一个EVent就是一条记录,由head和body两个部分组成,head存储的是管道,body存储的是字节数组

Flume1:基础知识、Agent架构、Channel/Sink传输拦截器与Put/Take传输事务控制

Flume的一些核心组件:Source采集数据源通过Channel传输到Sink中, Sink将数据最终传入到目的存储平台中

组件 功能
Web Server 数据产生的源头。文件、socket数据包、文件夹、kafka,mysql数据库等各种形式源数据
Agent

Flume的核心就是Agent 。Agent是一个Java进程,且运行在日志收集端,通过Agent接收日志,然后暂存起来,再发送到目的地。每个agent就相当于一个数据(被仿封装成event对象)传递员,主要有 3 个部分组成,Source、Channel、Sink

agent主要考虑的是在source和sink之间解耦合,以及异步操作。

flume支持多agent形式

Source

Agent核心组件之一,Source(源)用于从Web Servero数据源收集数据,然后发送到Channel(通道)。

Source 组件可以处理各种类型、各种格式的日志数据,包括 avro、thrift、exec、jms、spooling directory、netcat、sequence generator、syslog、http、legacy

Channel

Agent核心组件之一,Channel(通道)可以用来从Source接收数据,然后发送到Sink,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 将所有事件写到磁盘。因此在程序关闭或机器宕机的情况下不会丢失数据。

Channelprocessor会调用拦截器interceptor

Sink

Agent核心组件之一,Sink(接收器)用来把数据发送的目标地点,如上图放到HDFS中。

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

Sink 组件目的地包括 hdfs、logger、avro、thrift、ipc、file、HBase、solr、自定义。

一个channel对应多个sink,多个sink构成一个sink group,多个sink通过配置实现高可用的负载均衡

sink processor有2种:load balancer(round robing)和fall over

Event

整个数据传输过程中,流动的对象都是实现了org.apache.flume.Event接口的对象。Event也是事务保证的级别。

Flume 数据传输的基本单元,以 Event 的形式将数据从源头送至目的地。

主要由两部分组成:header和body

header是一个map[string,string]的KV形式的元数据,如标志、描述等

body是一个字节数组byte[],是具体数据的内容

1.4 flume的架构

  • 单Agent:

Flume1:基础知识、Agent架构、Channel/Sink传输拦截器与Put/Take传输事务控制

  • 串联Agent:

Flume1:基础知识、Agent架构、Channel/Sink传输拦截器与Put/Take传输事务控制

这种模式是将多个 flume 顺序连接起来了,从最初的 source 开始到最终 sink 传送的目的存储系统。此模式不建议桥接过多的 flume 数量,flume 数量过多不仅会影响传输速率,而且一旦传输过程中某个节点 flume 宕机,会影响整个传输系统。

Flume1:基础知识、Agent架构、Channel/Sink传输拦截器与Put/Take传输事务控制

  • 并联Agent(生产中最多的使用):

 Flume1:基础知识、Agent架构、Channel/Sink传输拦截器与Put/Take传输事务控制

这种模式是我们最常见的,也非常实用,日常 web 应用通常分布在上百个服务器,大者甚至上千个、上万个服务器。产生的日志,处理起来也非常麻烦。

用 flume 的这种组合方式能很好的解决这一问题,每台服务器部署一个 flume 采集日志,传送到一个集中收集日志的 flume,再由此 flume 上传到 hdfs、hive、hbase 等,进行日志分析

  •  单source多sinkAgent(也很常见)

 Flume1:基础知识、Agent架构、Channel/Sink传输拦截器与Put/Take传输事务控制Flume1:基础知识、Agent架构、Channel/Sink传输拦截器与Put/Take传输事务控制

Flume 支持将事件流向一个或者多个目的地。这种模式可以将相同数据复制到多个 channel 中,或者将不同数据分发到不同的 channel 中,sink 可以选择传送到不同的目的地

  • 负载均衡和故障转移

Flume1:基础知识、Agent架构、Channel/Sink传输拦截器与Put/Take传输事务控制

Flume 支持使用将多个 sink 逻辑上分到一个 sink 组,sink 组配合不同的 Sink Processor 可以实现负载均衡和错误恢复的功能。

2. 事务控制

flume是一个松散解耦合的结构,在各agent(source->channel_>sink)间传数据时可能会导致数据的丢失 ,为了保证数据传递的可靠性,如果发生异常可以把数据还原,引入了事务控制。  

flume使用两个独立的事务完成读与写的控制

2.1 Put 事务流程

读取,从source到channel过程的put操作:source读取数据源并写入event到channel(失败重读)

doPut:将批数据先写入临时缓冲区 putList

doCommit:检查 channel 内存队列是否足够合并

doRollback:channel 内存队列空间不足,回滚数据

2.2 Take 事务流程

从channel中到目录存储过程的take操作:sink从channel中获取event并写出到目标存储(失败时重写)

doTake:将数据取到临时缓冲区 takeList,并将数据发送到 HDFS

doCommit:如果数据全部发送成功,则清除临时缓冲区 takeList

doRollback:数据发送过程中如果出现异常,rollback 将临时缓冲区 takeList 中的数据归还给 channel 内存队列

Flume1:基础知识、Agent架构、Channel/Sink传输拦截器与Put/Take传输事务控制

 

3、Flume 拦截器

Flume1:基础知识、Agent架构、Channel/Sink传输拦截器与Put/Take传输事务控制

  • 拦截器工作在source组件之后,source产生的event会被传入拦截器根据需要进行拦截处理
  • 拦截器可以组成拦截器链
  • flume中内置一些比较常用的拦截器,如:

Channel Selector

Channel Selector 的作用就是选出 Event 将要被发往哪个 Channel。一个source要以对接多个channel

传递配置策略共有两种类型,分别是 Replicating (default)(复制)和 Multiplexing (多路复用)。

Replicating Selector 会将 source 过来的每一个 Event 发往所有的 Channel,Multiplexing 会根据相应的原则,将不同的 Event 发往不同的 Channel。

Sink Processor

Sink Processor 共有三种类型,分别是 Default Sink ProcessorLoad Balancing Sink Processor 和 Failover Sink Processor

Default Sink Processor 对应的是单个的 Sink,Load Balancing Sink Processor 和 Failover Sink Processor 对应的是 Sink Group。

Load Balancing Sink Processor 可以实现负载均衡的功能,Failover Sink Processor 可以实现故障转移的功能。

相关文章:

  • 2022-12-23
  • 2022-12-23
  • 2021-07-28
  • 2022-12-23
  • 2021-11-12
  • 2021-05-25
  • 2022-12-23
猜你喜欢
  • 2021-09-28
  • 2022-12-23
  • 2022-12-23
  • 2021-12-25
  • 2021-11-21
  • 2021-12-10
相关资源
相似解决方案