8. Flume

8.1 Flume 是什么

Flume用于将多种来源的日志以 的方式传输至Hadoop或者其它目的地。

Flume特点:

  • 可靠性:Flume的核心是把数据从数据源收集过来,再送到目的地。为了保证输送一定成功,在送到目的地之前,会先缓存数据,待数据真正到达目的地后,删除自己缓存的数据
    Flume 使用事务性的方式保证传送 Event 整个过程的可靠性。

  • 可恢复性Events 在通道中执行,由该通道管理从失败中恢复。Flume 支持持久文件通道(File Channel),系统宕机后数据不会丢失。还有一个内存通道(Memory Channel),它只是简单地将事件存储在内存队列中,但宕机不可恢复。


8.2 Flume 架构,Put事务,Take事务

Flume主要由下面3个组件组成:

  • Client:客户端,数据产生的地方,如 Web Server。
  • Agent:代理,一个独立的 JVM 进程。
  • Event:事件,指通过 Agent 传输的单个数据包,如日志数据通常对应一行数据。

Flume以一个或多个Agent部署运行,Agent包含三个组件:Source、Channel、Sink。

  • Source: 数据源。
  • Channel:连接 Source 和 Sink 的通道,传递数据。
  • Sink:从 Channel 拉取数据,并决定数据往哪里去,如 HDFS。

在这里插入图片描述
Source 和 Channel 之间为 Put 事务,Channel 和 Sink 之间为 Take 事务。
在这里插入图片描述


8.3 Flume 工作流程

在这里插入图片描述


8.4 Flume 拦截器

Flume 支持在运行时对 Event 数据进行过滤,可以通过拦截器(Interceptor)来实现。

自定义拦截器的目的是把日志分类,拦截器为每个 Event 加上一个 header,这个 header 就是日志的类型,当日志传输到 Kafka 的时候,通过 Key(Header)就能知道属于哪种类型的。

自定义拦截器的操作:

  1. 实现 Interceptor 接口,重写该接口的几个核心方法
  2. 将程序打包为 jar 上传到服务器的 {flume_home}/lib/ 目录下
  3. 然后在 Flume 配置文件中使用自定义的拦截器 agent.sources.s1.interceptors.il.type = com.flume.interceptor.MyInterceptor

8.5 Flume 可靠性保证

1. 负载均衡

负载均衡维护一个活动 Sink列表的索引来实现负载的分配。支持了 轮询(round_robin)随机(random) 两种选择机制来分配负载,默认是轮询,可以通过配置来更改。

在这里插入图片描述

Agent1会根据负载的机制来选择上面三个 Sink 中的哪一个进行工作。

工作时,此选择器使用其配置的选择机制选择下一个 Sink 并调用它。如果所选 Sink 无法正常工作,则处理器通过其配置的选择机制选择下一个可用 Sink。此实现不会将失败的 Sink 列入黑名单,而是继续乐观地尝试每个可用的 Sink。


2. 多层代理

当我们用 Flume 采集日志时,由于数据源的多样性,则往往需要配置多个 Flume 进行采集,如果只是使用单层 Flume 的话,那么往往会产生很多个文件夹,单个文件夹也只是来自同一个节点的数据组成的。

而实际开发中,为了减少 HDFS 的压力,同时提高后续 MR 的处理效率。往往会将同一组多个节点的数据汇聚到同一个文件中,这样同时也较少了数据从生产到分析的时间。

如下图,第一次 agent 负责采集原始数据,第二层 agent 负责对第一层数据进行汇聚。这种多层代理的方式尤其适合 source 源数据量庞大的时候,效率会高很多。

在这里插入图片描述

如果第一层某个代理或第二层某个代理出现问题,从而导致 Flume 丢失数据怎么办?

  • 第一层某个代理失败:让第一层的其他节点来接管这个故障的节点
  • 第二层某个代理失败:让第一层的每个节点具有多个冗余的 sink,然后把这些 sink 安排到同一个 sink 组中。如果第二层某个代理失败,则会切换到第二层的其他的 sink 组,从而实现故障转移和负载均衡。如下图所示:

在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值