Flume--复习总结

概述

Flume最早是Cloudera提供的日志收集系统,后贡献给Apache。flume支持在日志系统中定制各类数据发送方,用于收集数据。
Flume是一个高可用、高可靠的,分布式的海量的日志采集、聚合和传输的系统,Flume支持在日志系统中定制各类数据发送方,用于收集数据(source),Flume提供对数据进行简单处理并写到各种 数据接收烦恼歌(可定制)的能力(sink)、
系统需求: jdk1.6以上。推荐使用1.7或1.8

Flume总体架构

在这里插入图片描述
flume是分布式的日志收集系统,它将各个服务器中的数据收集起来并送到指定的地方去,比如说HDFS。

event事件

event的概念:
flume的核心是把数据从数据源(source)收集过来,再将收集到的数据送到指定的目的地(sink)。为了保证输送的过程一定成功,在送到目的地(sink)之前,会先缓存数据在(channel)中,待数据真正到达目的地(sink)后,flume再删除自己缓存的数据。
在整个数据的传输的过程中,流动的是event,即事务保证是在event级别进行的。event进传输的数据进行封装,是flume传输数据的基本单位,如果是文本文件,通常是一行记录,event也是事务的基本单位。event从source,流向channel,再到sink,本身为一个字节数组,并可携带headers(头信息)信息。event代表着一个数据的最小完整单元,从外部数据源来,向外部目的地区。

flume的运行机制

flume运行的核心是agent,agent本身是一个java进程,agent里面包含3个核心组件:source–channel–sink,类似生产者、仓库、消费者的架构。
source: source组件时专门用来收集数据的。可以处理各种类型、各种格式的日志数据,包括avro、thrift、exec、jms、spooling、directory、netcat等
channel: source组件把数据收集来以后临时存放在channel中,即channel组件在agent中是agent中专门用来存放临时数据的-----对采集到的数据进行简单的缓存,可以存放在memory、jdbc、file等等。
sink: sink组件时用于把数据发送到目的地的组件,目的地包括HDFS、logger、avro、ipc、file等
一个完整的工作流程:source不断的接收数据,将数据封装成一个一个的event,然后将event发送给channel,channel作为一个缓冲区会临时存放这些event数据,随后sink会将channel只能过的event数据发送到指定的地方。
注: 只有在sink将channel中的数据成功发送出去之后,channel才会将临时event数据进行删除,这种机制保证了数据传输的可靠性和安全性。
在这里插入图片描述

flume的用法

多个agent的数据流(多级流动)
在这里插入图片描述
数据流合并(扇入流)
在做日志搜集的时候一个常见的场景是,大量的生产日志的客户端发送数据到少量的附属于子系统的消费者agent。例如,从数百个web服务器找那个收集日志,他们发送数据到十几个负责将数据写入HDFS集群的agent。
在这里插入图片描述
数据流复用(扇出流)
flume支持堵路输出event流到一个或多个目的地。这是靠定义多路数据流实现的,它可以实现复制和选择性路由一个event到一个或者多个channel。
在这里插入图片描述

flume的特性

可靠性
事务型的数据传递,保证数据的可靠性,一个日志交给flume来处理,不会出现日志丢失或未被处理的情况。
可恢复性
通道可以以内存或者文件的方式实现,内存更快,但不可恢复。文件较慢但是提供可恢复性。

flume的interceptors

在这里插入图片描述
1.Timestamp Interceptor
这个拦截器在事件头中插入以毫秒为单位的当前处理时间。头的名字为timestamp,值为当前处理的时间戳。如果在之前已经有这个时间戳,则保留原有的时间戳。
在这里插入图片描述
2.Host Interceptor
这个拦截器插入当前处理Agent的主机名或ip,头名字为host或配置的名称,值是主机名或ip地址,基于配置。
在这里插入图片描述
3.static Interceptor
此拦截器允许用户增加静态头信息使用静态的值到所有事件。目前的实现中不允许一次指定多个头,如果需要增加多个静态头可以指定多个Static interceptors
在这里插入图片描述
在这里插入图片描述
4.UUID Interceptor
这个拦截器在所有事件头中增加一个全局一致性标志–UUID
在这里插入图片描述
在这里插入图片描述
5.Search and Replace Interceptor
这个拦截器提供了简单的基于字符串的正则搜索和替换功能
在这里插入图片描述
在这里插入图片描述
6.Regex Filtering Interceptor
此拦截器通过解析事件体去匹配给定正则表达式来筛选事件。所提供的正则表达式即可以用来包含或刨除事件。
在这里插入图片描述
在这里插入图片描述
7.Regex Extractor Interceptor
使用指定正则表达式匹配事件,并将匹配到的组作为头加入到事件中,它支持插件化的序列化器用来格式化匹配到的组在加入他们作为头之前。
在这里插入图片描述

flume的selector

1.Selector的复制模式
选择器可以工作在复制、多路复用(路由)模式下
Selector默认是复制模式(replicating),即把source复制,然后分发给多个sink
在这里插入图片描述
针对每个Source,都有一个配置参数,即selector.type
在这里插入图片描述
2.多路复用模式
在这种模式下,用户可以指定转发的规则。selector根据规则进行数据的分发
可配置参数:
在这里插入图片描述

flume的Process

Sink Group允许用户将多个Sink组合成一个实体。
Flume Sink Processor 可以通过切换组内Sink用来实现负载均衡效果,或者在一个Sink故障时切换到另一个Sink
格式要求:
sinks - 用空格分隔的Sink集合
processor.type default 类型名称,必须是default、failover 或load_balance
Default Sink Processor
Default Sink Processor 只接受一个Sink。这是默认的策略。即如果不配置Processor,用的是这个策略。
Failover sink Processor
Failover Sink Processor 维护一个sink们的优先表。确保只要是一个可以的就绪事件就可以被处理。失败处理的原则是:为失效的sink指定一个冷却事件,在冷却时间到达后再重新使用。
sink们可以被配置一个优先级,数字越大优先级越高。如果sink发送事件失败,则下一个优先级高的sink将会尝试接着发送事件,如果没有指定优先级免责优先级顺序取决于sink们配置顺序,先配置的默认优先级高于后配置的,在配置的过程中,设置一个group processor ,并且为每一个sink都指定一个优先级。优先级必须是唯一的,另外可以设置maxpenalty属性指定失败的时间。
在这里插入图片描述
Load balancing Sink Processor
Load balancing Sink processor 提供了在多个sink之间实现负载均衡的能力。它维护了一个活动sink的索引列表。它支持轮询或者随机方式的负载均衡,默认值是轮询方式,可以通过配置指定。也可以通过实现AbstractSinkSelector接口直线自定义的选择机制。
在这里插入图片描述

Flume事务机制

Flume的事务机制与可靠性保证的实现,最核心的组件时Channel(通道)。如果没有Channel组件。而仅靠Source与?Sink组件时无从谈起的。
文件通道(File Channel)
文件通道指的是将事件存储到代理(Agent)本地文件系统中的通道。虽然要比内存通道慢一些,不过他却提供了持久化的存储路径,可以应对大多数情况,他应该在数据流中不允许出现缺口的场合。
内存通道
File channel虽然提供了持久化,但是其性能较差,吞吐量受到一定的限制。相反,memory channel则牺牲可靠性换取吞吐量。
Flume内存通道事务机制
编程模型:
在这里插入图片描述
Put事务流程:
在这里插入图片描述
Take事务
在这里插入图片描述
take事务流程:
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值