大数据中篇03_flume事务(重点!)

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放,直到放不下再往下个放

猜你喜欢

转载自blog.csdn.net/Radiation_x/article/details/113772796