Flume数据传输事务分析

  • 时间:
  • 浏览:0

Put事务都前要分为以下阶段:

channel.put -> transaction.doPut:

实际上,Transaction实例中含 一一一个双向阻塞队列LinkedBlockingDeque(感觉没必要用双向队列,每个多守护进程 写个人的putList,又全是多个多守护进程 ?),分别为:

事务逻辑全是processEventBatch这些办法里:

每个Worker多守护进程 都拥有一一一一个Transaction实例,保所处Channel(BasicChannelSemantics)里的ThreadLocal变量currentTransaction.

亲戚亲戚我们都我们都我们都从Source数据接收到写入Channel这些过程对Put事物进行分析。

transaction.commit:

Take事务分为以下阶段:



接着,HDFS写多守护进程 bucketWriter将take到的数据写到HDFS,可能批数据都写完了,则要commit了:

Sink我我觉得是由SinkRunner多守护进程 调用Sink.process办法来了处里数据的。亲戚亲戚我们都我们都我们都从HdfsEventSink的process办法说起,Sink类全是个process办法,用来处里传输数据的逻辑。:

大致流程图:



可能在事务期间总出 异常,比如channel剩余空间欠缺,则rollback:

Flume提供事物操作,保证用户的数据的可靠性,主要体现在:

没人 ,事务到底做了有哪些?

本文基于ThriftSource,MemoryChannel,HdfsSink一一一个组件,对Flume数据传输的事务进行分析,可能使用的是一些组件,Flume事务具体的处里办法可能不同。一般情况报告下,用MemoryChannel就好了,亲戚亲戚我们都我们都我们都公司用的怎么让这些,FileChannel传输传输速率慢,我我觉得提供日志级别的数据恢复,怎么让一般情况报告下,不断电MemoryChannel是不需要丢数据的。

Flume在对Channel进行Put和Take操作的刚刚,前要要用事物包住,比如:

对于Put事物操作,当然是只用到putList了。putList怎么让一一一一个临时的缓冲区,数据会先put到putList,最后由commit办法会检查channel与非 有足够的缓冲区,有则合并到channel的队列。

接着看看channel.take,作用是将数据放进临时缓冲区,实际调用的是transaction.doTake:



ThriftSource会spawn多个Worker多守护进程 (ThriftSourceHandler)去处里数据,Worker处里数据的接口,亲戚亲戚我们都我们都我们都只看batch批量处里这些接口:

很简单,我我觉得怎么让清空takeList而已。可能bucketWriter在写数据到HDFS的刚刚总出 异常,则要rollback:

同个节点内,Source写入数据到Channel,数据在一一一一个批次内的数据总出 异常,则不写入到Channel。已接收到的要素数据直接离开,靠上一一一一个节点重发数据。