大数据之Flume详解

1 Flume概述

1.1 Flume定义

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

1.2 为什么选用Flume?

在这里插入图片描述

1.2.1 基本概念

1.Event

  • 在Flume中,每一条日志都是一个Event,即Flume会将收集到的每一条日志封装成一个Event对象。
  • Event本质上是一个json串,即Flume会将收集到的日志封装成一个json。
  • Event固定的包含2个部分:headers和body。
    2.Agent:是Flume的基本组成结构,固定的包含3个部分。
  • Source:从数据源采集数据
  • Channel:临时存储数据
  • Sink:将数据写出到目的地

Flume官网基础架构示意图:
在这里插入图片描述

1.3 基本组件

1.3.1 Flume Sources

source组件是专门用来收集数据的,可以处理各种类型、各种格式的日志数据;
其中包括有:Avro Source、Thrift Source、Exec Source、Spooling Directory Source、NetCat、Kafka Source、Sequence generator、Syslog Source、HTTP Source、Legacy Source等等。(加粗的字体表示常见的Source)

1.3.2 Flume Channels

source组件吧数据收集过来之后,临时存放在Channel中,即Channel组件是agent中专门用来存放临时数据的——对采集到的数据进行简单的缓存。

  • Memory channel:内存通道,将数据临时存储在内存(阻塞式队列)中,因此读写速度相对较快,但是不稳定。适用于吞吐量较高的场景。如果不指定,那么在内存中最多能够同时存储100条数据。
  • File Channel:文件通道,将数据临时存储在磁盘上,因此读写速度相对比较慢但是可靠,适用于可靠性的场景。
  • JDBC Channel:将数据临时存储在数据库中,到目前为止,只支持Derby数据库(微型数据库)
  • Spillable Memory Channel:内存溢出通道,会先将数据放到内存中,如果内存中存不下,不会阻塞,而是再将数据往磁盘上写(目前还在试验阶段)。

1.3.3 Flume Sinks

sink组件是用于把数据发送到目的地的组件。目的地包括HDFS Sink、Logger Sink、Avro Sink、thrift、ipc、File Roll Sink、 null、hbase、solr、自定义等。(加粗的字体表示常见的Sink)

========================================================2020-10-10

1.4 Flume的启动命令

如果是在安装目录下:

bin/flume-ng agent -n <name> -c conf -f <file> -Dflume.root.logger=INFO,console

或者:

bin/flume-ng agent --name <name> --conf conf --conf-f <file> -Dflume.root.logger=INFO,console

参数及其描述
在这里插入图片描述

1.5 事务

在这里插入图片描述

1.6 Selector(选择器)

1.6.1 Replicating

Selector 默认是复制模式(replicating),即把source复制,然后分发给多个sink
在这里插入图片描述

1.6.2 Muitiplexing

在这种模式下,用户可以指定转发的规则。selector根据规则进行数据的分发
在这里插入图片描述

1.7 Processor(处理器)

1.processor本质上是一个sink组,指可以将一个或者多个sink绑定到同一个组中
2.processor提供了3种模式

1.7.1 default

1. 只接受一个 Sink
2. 这是默认的策略。即如果不配置Processor,用的是这个策略

在这里插入图片描述

1.7.2 failover

1. 维护一个sink们的优先表。确保只要一个是可用的就事件就可以被处理
2. 失败处理原理是,为失效的sink指定一个冷却时间,在冷却时间到达后再重新使用
3. sink们可以被配置一个优先级,数字越大优先级越高
4. 如果sink发送事件失败,则下一个最高优先级的sink将会尝试接着发送事件
5. 如果没有指定优先级,则优先级顺序取决于sink们的配置顺序,先配置的默认优先级高于后配置的
6. 在配置的过程中,设置一个group processor ,并且为每个sink都指定一个优先级
7. 优先级必须是唯一的
8. 另外可以设置maxpenalty属性指定限定失败时间

在这里插入图片描述

1.7 3 load_balance

1. 提供了在多个sink之间实现负载均衡的能力
2. 它维护了一个活动sink的索引列表
3. 它支持轮询或随机方式的负载均衡,默认值是轮询方式,可以通过配置指定
4. 也可以通过实现AbstractSinkSelector接口实现自定义的选择机制

在这里插入图片描述

1.8 Interceptor(拦截器)

1. Flume有能力在运行阶段修改/删除Event,这是通过拦截器(Interceptors)来实现的
2. 拦截器需要实现org.apache.flume.interceptor.Interceptor接口
3. 拦截器可以修改或删除事件基于开发者在选择器中选择的任何条件
4. 拦截器采用了责任链模式,多个拦截器可以按指定顺序拦截
5. 一个拦截器返回的事件列表被传递给链中的下一个拦截器
6. 如果一个拦截器需要删除事件,它只需要在返回的事件集中不包含要删除的事件即可
7. 如果要删除所有事件,只需返回一个空列表

1.8.1 Timestamp Interceptor

1. 这个拦截器在事件头中插入以毫秒为单位的当前处理时间
2. 头的名字为timestamp,值为当前处理的时间戳
3. 如果在之前已经有这个时间戳,则保留原有的时间戳

在这里插入图片描述

1.8.2 Host Interceptor

1. 这个拦截器插入当前处理Agent的主机名或ip
2. 头的名字为host或配置的名称
3. 值是主机名或ip地址,基于配置

在这里插入图片描述

1.8.3 Static Interceptor

1. 此拦截器允许用户增加静态头信息使用静态的值到所有事件
2. 目前的实现中不允许一次指定多个头
3. 如果需要增加多个静态头可以指定多个Static interceptors

在这里插入图片描述

1.8.4 UUID Interceptor

1. 这个拦截器在所有事件头中增加一个全局一致性标志,其实就是UUID

在这里插入图片描述

1.8.5 Search And Replace Interceptor

1. 这个拦截器提供了简单的基于字符串的正则搜索和替换功能

在这里插入图片描述

1.8.6 Regex Filtering Interceptor

1. 此拦截器通过解析事件体去匹配给定正则表达式来筛选事件
2. 所提供的正则表达式即可以用来包含或刨除事件

在这里插入图片描述

1.8.7 Regex Extractor Interceptor

1. 使用指定正则表达式匹配事件,并将匹配到的组作为头加入到事件中
2. 它也支持插件化的序列化器用来格式化匹配到的组在加入他们作为头之前

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值