Flume的原理和基本使用

Flume 官网:http://archive.cloudera.com/cdh5/cdh/5/flume-ng-1.6.0-cdh5.15.1/

概述

  Flume是一个分布式日志的的采集框架,其核心是把数据从数据源(source)收集过来,再将收集到的数据送到指定的目的地(sink)。为了保证输送的过程一定成功,在送到目的地(sink)之前,会先缓存数据(channel),待数据真正到达目的地(sink)后,flume再删除自己缓存的数据。
一般实现框架:N个server(集群外) ==> flume ==> Hadoop(集群内)
Flume的原理和基本使用_第1张图片

组件

Flume日志采集传输系统中核心的角色是agent,agent本身是一个java进程,一般运行在日志收集节点,一个agent主要包含3大组件source、channel、sink。

source

  1. 对接外部数据源收集数据,主要可对接的有 avro / exec / spooling / taildir / kafka / nc / http / custom等
  2. 一个source可对接一个或多个channel,对接多个channel时,可设置Channel Selector和interceptor实现数据的简单清洗和分流。
  3. 注意
    Spooling有两个缺陷:一是文件名不能重复,二是已经处理完成的文件是不能被修改的,否则报错。生产上一般不用这种方式。
    exec的缺陷:重启后会重复消费数据,并且只能监控一个文件,生产上一般也不用这种方式。
    综上,生产上一般使用过 taildir 方式。

channel

  1. 数据缓存池,memory / file / kafka / custom等,使用memory方式时需要允许数据存在少量丢失,但memory比file方式更快。
  2. 一个channel可对接多个source(同时接收多种数据源)和多个sink(实现负载均衡)

sink

  1. 对接到外部的数据目的地,有hdfs / logger / avro / kafka / es / custom等。
  2. 一个sink只能对接一个channel。

数据流程

数据处理流程

Flume的原理和基本使用_第2张图片

事务

source发送数据(put)到channel和sink从channel取数据(take)都是支持事务的,传输失败时会自动回滚。
Flume的原理和基本使用_第3张图片

核心概念

event
Flume数据传输的基本单元,一条记录对应一个Event,Event由可选的header和载有数据的body构成。header是形式存在的,header的作用是实现路由、分发。body是实际传输的数据,以字节数组 byte Array形式存在。

Channel Selectors
channel选择器分为两种:
Replicating Channel Selector (default) :默认使用这种方式,会向所有channel发送一样的数据。
Multiplexing Channel Selector:根据header信息,将数据分发到不同channel中,实现数据分流。

Interceptors
拦截器可以对Event进行删除和修改,根据实际场景规则简单清洗数据,其种类较多,具体参考官网。
可以在拦截器中设置数据的header信息,再配合channel选择器实现数据分流。

Sink Processors
Sink Processors有3种策略:(暂时不支持自定义)

  1. Default Sink Processor:默认方式,只支持单个sink的场景。
  2. Failover Sink Processor:可以配置多个sink,并设置优先级高低,优先级最高的作为主sink,其余sink作为热备用sink,一旦主sink宕了,会从备用sink中选取优先级最高的立马顶替。一般用这种方式实现容错
  3. Load balancing:支持 round_robin(轮询)和 random(随机)方式,即配置多个sink后,用这种方式实现负载均衡

基本用法

  1. 多个agent级联,中间用avro通信
    Flume的原理和基本使用_第4张图片
  2. 数据收集
    Flume的原理和基本使用_第5张图片
  3. 多路分流,需要配置channel选择器为Multiplexing,默认是Replicating,即每个channel数据一样。
    Flume的原理和基本使用_第6张图片
  4. 负载均衡
    一个source ==> 一个channel ==>多个sink

容错机制

主要使用的是Sink Processors的failover方式,根据sink优先级实时切换数值越大优先级越高,优先级高的宕了会自动切换到优先级低的继续工作。
注意:优先级高的sink宕了以后flune会报错不断尝试连接,但不影响继续使用,其余热备sink可以继续正常工作。

你可能感兴趣的:(Flume的原理和基本使用)