李林超博客
首页
归档
留言
友链
动态
关于
归档
留言
友链
动态
关于
首页
大数据
正文
Flume进阶
Leefs
2022-03-25 PM
1429℃
0条
### 一、Flume事务 **在Flume中一共有两个事务:** - **Put事务:**在Source到Channel之间 - **Take事务:**Channel到Sink之间 从Source到Channel过程中,数据在Flume中会被封装成Event对象,也就是一批Event,把这批Event放到一个事务中,把这个事务也就是这批event一次性的放入Channel中。 同理,Take事务的时候,也是把这一批event组成的事务统一拿出来到sink放到HDFS上。 ![02.Flume进阶01.png](https://lilinchao.com/usr/uploads/2022/03/1250716855.png) **Put事务流程** + **doPut**:将批数据先写入临时缓冲区 putList + **doCommit**:检查 channel 内存队列是否足够合并 + **doRollback**:channel 内存队列空间不足,回滚数据 **注意** 在doCommit提交之后,事务在向Channel存放数据的过程中,事务容易出问题。 如Sink取数据慢,而Source放数据速度快,容易造成Channel中数据的积压,如果putList中的数据放不进去,会如何呢? **此时会调用 doRollback 方法,doRollback方法会进行两项操作:** + 将putList清空; 抛出 ChannelException异常。 + source会捕捉到doRollback抛出的异常,然后source就将刚才的一批数据重新采集,然后重新开始一个新的事务,这就是事务的回滚。 **Take 事务流程** + **doTake**:将数据取到临时缓冲区 takeList,并将数据发送到 HDFS + **doCommit**:如果数据全部发送成功,则清除临时缓冲区 takeList + **doRollback**:数据发送过程中如果出现异常,rollback 将临时缓冲区 takeList 中的数据归还给 channel 内存队列 **注意** 针对HDFS Sink,手动调用IO流的flush方法,将IO流缓冲区的数据写入到HDFS磁盘中; flush到HDFS的时候组容易出问题。flush到HDFS的时候,可能由于网络原因超时导致数据传输失败,这个时候调用doRollback方法来进行回滚,回滚的时候由于takeList中还有备份数据,所以将takeList中的数据原封不动地还给channel,这时候就完成了事务的回滚。 但是,如果flush到HDFS的时候,数据flush了一半之后出问题了,这意味着已经有一半的数据已经发送到HDFS上面了,现在出了问题,同样需要调用doRollback方法来进行回滚,回滚并没有“一半”之说,它只会把整个takeList中的数据返回给 channel,然后继续进行数据的读写。这样开启下一个事务的时候容易造成**数据重复**的问题。 ### 二、Flume Agent内部原理 ![02.Flume进阶02.png](https://lilinchao.com/usr/uploads/2022/03/3679568827.png) **重要组件** **(1)ChannelSelector** ChannelSelector 的作用就是选出 Event 将要被发往哪个 Channel。其共有两种类型, 分别是 Replicating(复制)和 Multiplexing(多路复用)。 ReplicatingSelector 会将同一个 Event 发往所有的 Channel,Multiplexing 会根据相应的原则,将不同的 Event 发往不同的 Channel。 **(2)SinkProcessor** SinkProcessor共有三种类型,分别是`DefaultSinkProcessor` 、 `LoadBalancingSinkProcessor` 和 `FailoverSinkProcessor`。 `DefaultSinkProcessor` 对 应 的 是 单 个 的 Sink , `LoadBalancingSinkProcessor` 和 `FailoverSinkProcessor` 对应的是 Sink Group,`LoadBalancingSinkProcessor` 可以实现负载均衡的功能,`FailoverSinkProcessor` 可以错误恢复的功能。 *附参考文章来源:* *《尚硅谷大数据之Flume》* *https://zhuanlan.zhihu.com/p/307603757*
标签:
Flume
非特殊说明,本博所有文章均为博主原创。
如若转载,请注明出处:
https://lilinchao.com/archives/1949.html
上一篇
Flume概述
下一篇
Flume拓扑结构
评论已关闭
栏目分类
随笔
2
Java
326
大数据
229
工具
31
其它
25
GO
47
NLP
4
标签云
Tomcat
随笔
GET和POST
并发线程
JavaWeb
VUE
散列
算法
正则表达式
Beego
微服务
Ubuntu
Hbase
SpringCloudAlibaba
MyBatis
HDFS
Java阻塞队列
Docker
人工智能
Golang
前端
RSA加解密
Spark Core
数据结构和算法
Kibana
排序
Thymeleaf
Stream流
Typora
Spark Streaming
友情链接
申请
范明明
庄严博客
Mx
陶小桃Blog
虫洞
评论已关闭