flume到底会丢数据吗?

什么时候最容易出问题呢?——flush到HDFS的时候组容易出问题

  如:flush到HDFS的时候,可能由于网络原因超时(或者集群宕机)导致数据传输失败,这个时候同样地调用doRollback方法来进行回滚,回滚的时候,由于takeList中还有备份数据,所以将takeList中的数据原封不动地还给channel,这时候就完成了事务的回滚。

  但是,如果flush到HDFS的时候,数据flush了一半之后出问题了,这意味着已经有一半的数据已经发送到HDFS上面了,现在出了问题,同样需要调用doRollback方法来进行回滚,回滚并没有“一半”之说,它只会把整个takeList中的数据返回给channel,然后继续进行数据的读写。这样开启下一个事务的时候就容易造成数据重复的问题。

  所以,在某种程度上,flume对数据进行采集传输的时候,它有可能会造成数据的重复,但是其数据不丢失。

一般报错日志如下:

13 四月 2021 18:33:32,966 ERROR [hdfs-k8-call-runner-26] (org.apache.flume.sink.hdfs.AbstractHDFSWriter.hflushOrSync:268)  - Error while trying to hflushOrSync!
13 四月 2021 18:33:32,966 WARN  [hdfs-k8-roll-timer-0] (org.apache.flume.sink.hdfs.BucketWriter.close:364)  - failed to close() HDFSWriter for file (hdfs://mycluster/user/root/flume/xxx/ds=2021-04-13/hs=18//FlumeData.1618308212916.tmp). Exception follows.
java.io.EOFException: Premature EOF: no length prefix available
        at org.apache.hadoop.hdfs.protocolPB.PBHelper.vintPrefixed(PBHelper.java:2280)
        at org.apache.hadoop.hdfs.DFSOutputStream$DataStreamer.transfer(DFSOutputStream.java:1020)
        at org.apache.hadoop.hdfs.DFSOutputStream$DataStreamer.addDatanode2ExistingPipeline(DFSOutputStream.java:990)
        at org.apache.hadoop.hdfs.DFSOutputStream$DataStreamer.setupPipelineForAppendOrRecovery(DFSOutputStream.java:1131)
        at org.apache.hadoop.hdfs.DFSOutputStream$DataStreamer.processDatanodeError(DFSOutputStream.java:876)
        at org.apache.hadoop.hdfs.DFSOutputStream$DataStreamer.run(DFSOutputStream.java:402)

 

参考:

https://blog.csdn.net/zhang7761/article/details/110240653

上一篇:C语言链表头插法逆向输出


下一篇:【大数据Flume系列】 Flume面试题整理