文章目录

  • 1.定义
  • 组成架构
  • 组件
  • Agent
  • Source:接受各种数据
  • exec、tailDir、spoolDir监控文件的区别
  • Channel:缓冲区
  • channel selector
  • Sink
  • Event
  • innode
  • 内部原理
  • 自定义拦截器
  • 实际应用
  • 拓扑结构
  • 自定义


1.定义

Flume(水道 )是Cloudera提供的一个高可用的,高可靠的,分布式的海量日志采集、聚合和传输的系统。Flume基于流式架构,灵活简单。

最主要的作用是实时读取服务器本地数据到HDFS

组成架构

flume 传数据到 kafka flume数据传输的基本单元_flume 传数据到 kafka

组件

Agent

Agent是一个JVM进程,它以事件的形式将数据从源头送至目的,是Flume数据传输的基本单元。

Agent主要有3个部分组成,Source、Channel、Sink。

Source:接受各种数据

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

可以轻量处理数据,如拦截。

用的最多的就是日志文件

exec、tailDir、spoolDir监控文件的区别
  1. exec是在执行 tailDir命令,监控单个文件,但不能保证数据不丢失;
  2. Spooldir Source 能够保证数据不丢失,且能够实现断点续传,但延迟较高,不能实时监控;
  3. Taildir Source 既能够实现断点续传,又可以保证数据不丢失,还能够进行实时监控。

Channel:缓冲区

Channel是位于Source和Sink之间的缓冲区。因此,Channel允许Source和Sink运作在不同的速率上。Channel是线程安全的,可以同时处理几个Source的写入操作和几个Sink的读取操作。

Flume自带两种Channel:Memory Channel和File Channel。

  1. Memory Channel是内存中的队列。Memory Channel在不需要关心数据丢失的情景下适用。如果需要关心数据丢失,那么Memory Channel就不应该使用,因为程序死亡、机器宕机或者重启都会导致数据丢失。
  2. File Channel将所有事件写到磁盘。因此在程序关闭或机器宕机的情况下不会丢失数据。
channel selector
  1. replicating:复制
    发送的每个channel
  2. multiplexing:多路复用
    选择发送

Sink

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

Sink是完全事务性的。在从Channel批量删除数据之前,每个Sink用Channel启动一个事务。批量事件一旦成功写出到存储系统或下一个Flume Agent,Sink就利用Channel提交事务。事务一旦被提交,该Channel从自己的内部缓冲区删除事件。

Sink组件目的地包括hdfs、logger、avro、thrift、ipc、file、null、HBase、solr、自定义。其中hdfs和kafka最常用

Event

传输单元,Flume数据传输的基本单元,以事件的形式将数据从源头送至目的地。读取日志的时候一次读一行

Header:事件的一些属性,key-value

Body:存放该条数据,形式为字节数组

flume 传数据到 kafka flume数据传输的基本单元_数据库_02

innode

Linux 中储存文件元数据的区域就叫做 inode,每个 inode 都有一个号码,操作系统 用 inode 号码来识别不同的文件,Unix/Linux 系统内部不使用文件名,而使用 inode 号码来识别文件

内部原理

flume 传数据到 kafka flume数据传输的基本单元_flume 传数据到 kafka_03

sink处理器有三种

  1. defaultProfessor(单个sink)
  2. LoadBalancingProfessor(负载均衡,用的最多)
  3. FailOverProfessor(故障转移)

自定义拦截器

实际应用

将不同日志发送到不同文件目录下

拓扑结构

  1. 简单串联
    将数据连接起来了,但是影响速率和有单点故障
  2. 多路复用
    配置多个channel和sink,发送到不同目的地
  3. 负载均衡和故障转移

flume 传数据到 kafka flume数据传输的基本单元_数据库_04

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

  1. 聚合
    最符合实际应用场景,将多台服务器的日志数据采集,并汇总到hdfs、hive等进行处理

自定义

flume可自定义source、sink、interceptpr