大数据中篇03_Flume

Flume

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

在这里插入图片描述

Flume基础架构

在这里插入图片描述

Flume安装部署

(1)将apache-flume-1.9.0-bin.tar.gz上传到linux的/opt/software目录下

(2)解压apache-flume-1.9.0-bin.tar.gz到/opt/module/目录下

tar -zxf /opt/software/apache-flume-1.9.0-bin.tar.gz -C /opt/module/

(3)修改apache-flume-1.9.0-bin的名称为flume

mv /opt/module/apache-flume-1.9.0-bin /opt/module/flume

(4)将lib文件夹下的guava-11.0.2.jar删除以兼容Hadoop 3.1.3**(切记要改)**

rm /opt/module/flume/lib/guava-11.0.2.jar

Source分类讲解

Taildir Source:支持断点续传、多目录文件监控

Avro Source:Avro端口监听并接收来自外部的Avro客户流的事件

Exec Source:Exec Source的配置就是设定一个Unix(linux)命令,然后通过这个命令不断输出数据

Spooling Directory Source:监测配置的目录下新增的文件,并将文件中的数据读取出来

Sink分类讲解

HDFS Sink:当需要将事件消息写入到Hadoop分布式文件系统(HDFS)时,可以使用HDFS Sink

Avro Sink:和 Avro Source一起工作,用于构建Flume分层收集数据消息结构

Kafka Sink:通过该Sink可将事件消息数据发布到Kafka topic 上

Logger Sink:可以将数据输出到控制台上

Flume事务(重点)

在这里插入图片描述

Put 事务流程

doPut:将批数据先写入临时缓冲区 putList

doCommit:检查 channel 内存队列是否足够合并

doRollback:channel 内存队列空间不足,回滚数据

Take 事务流程

doTake:将数据取到临时缓冲区 takeList,并将数据发送到 HDFS

doCommit:如果数据全部发送成功,则清除临时缓冲区 takeList

doRollback:数据发送过程中如果出现异常,rollback 将临时缓冲区 takeList 中的数据归还给 channel 内存队列

事务实现

​ flume使用两个独立的事务分别负责从soucrce到channel,以及从channel到sink的事件传递

source->channel

​ source端到channel事务容易实现,比如spooldir,每次文件从source端到channel端,一旦文件所有数据全部传递到channel,则文件标示为成功,如果要做到精细化点,可以设置batchsize,配置一个事务多少行数据,一个batch一个事务单元,多个batch事务成功,则文件标示成功。

channel->target

​ channel端到sink端事务,根据不同的channel类型有不同设定,基于FileChannel,根据sink传递状态来决定,重传数据还是标示该事务成功。而基于MemoryChannel,由于不存在数据备份,一旦sink失败,需要数据回滚,重新写回channel,等待重新传递。

Flume Agent内部原理

在这里插入图片描述

注:DefaultSinkProcessor 单 Sink

​ LoadBalancingSinkProcessor 多个Sink 平均分

​ FailoverSinkProcessor 多个Sink 往一个Sink放,直到放不下再往下个放

Flume拓扑结构(重点会写配置文件!!!)

简单串联

在这里插入图片描述

复制和多路复用

在这里插入图片描述

负载均衡和故障转移

在这里插入图片描述

聚合

在这里插入图片描述

Interceptor拦截器(次次重点)

拦截器是简单的插件式组件,设置在source和channel之间。source接收到的时间,在写入channel之前,拦截器都可以进行转换或者删除这些事件。每个拦截器只处理同一个source接收到的事件。可以自定义拦截器

flume内置了很多拦截器,并且会定期的添加一些拦截器,在这里列出一些flume内置的,经常使用的拦截器

下列为常用拦截器

Timestamp Interceptor(时间戳拦截器)

flume中一个最经常使用的拦截器 ,该拦截器的作用是将时间戳插入到flume的事件报头中。如果不使用任何拦截器,flume接受到的只有message。时间戳拦截器的配置。 参数 默认值 描述 type 类型名称timestamp,也可以使用类名的全路径 preserveExisting false 如果设置为true,若事件中报头已经存在,不会替换时间戳报头的值

正则过滤拦截器(Regex Filtering Interceptor)

在日志采集的时候,可能有一些数据是我们不需要的,这样添加过滤拦截器,可以过滤掉不需要的日志,也可以根据需要收集满足正则条件的日志。参数默认值描述 type 类型名称REGEX_FILTER regex .* 匹配除“\n”之外的任何个字符 excludeEvents false 默认收集匹配到的事件。如果为true,则会删除匹配到的event,收集未匹配到的

自定义拦截器

数默认值描述 type 类型名称REGEX_FILTER regex .* 匹配除“\n”之外的任何个字符 excludeEvents false 默认收集匹配到的事件。如果为true,则会删除匹配到的event,收集未匹配到的

自定义拦截器

flume面试问题:丢不丢失数据,怎么实现的?为啥这么快?

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值