前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Flume(三)事务

Flume(三)事务

作者头像
用户1483438
修改2022-04-08 09:25:08
3820
修改2022-04-08 09:25:08
举报
文章被收录于专栏:大数据共享

介绍

Flume是什么?

Flume 是一个分布式、可靠且高可用的服务,用于有效地收集,聚合和移动大量日志数据。它具有基于流数据的简单灵活架构,良好的可靠性机制、故障转移和恢复机制,具有强大的容错性。它支持在系统中定制各类数据发送方,用于收集数据;同时Flume 提供对数据的简单处理,并具有写到各种数据接收方的能力。

Flume三大框架

 Flume流程图
Flume流程图

Source 负责读取数据并写入Channel, Channel 负责存储临时存储数据,起到缓冲的作用,等待Sink读取。 Sink会从Channel拿去数据,并写入目的地(控制台、文件、hdfs、数据库等)

Flume流程事务图

 Flume流程图
Flume流程图

整个流程总共有两处会操作Channel,一次写入(source),一次读取(sink)。这两处的操作都可能造成丢数据的风险,Flume也考虑到了这一点,在Flume引入了事务。 Flume中共有两个事务, 第一个:source-channel 会有一个事务(put事务)。 第二个:channel-sink 也有一处事务(take事务)。

Flume 中的 put事务

Put事务流程
Put事务流程
  1. source 负责数据的读取,并把封装一个接收事件(就是一条一条的数据),所谓的接收事件就是一个Event对象。
  2. 并不会将 Event对象直接给 Channel ,而是先存放起来,批量(batch data)提交给 Transaction,此时进行Put事务流程。数据批的大小取决于配置参数batch size的值;。 如:Exec Source的batchSize默认值为20,各个source可能 batchSize 默认值可能不同。
  3. doPut:事务开始的时候会调用一个doPut 方法,doPut方法将一批数据放在putList中。putList大小由transaction capacity参数控制。
  4. doCommit :准备提交数据到channel,但是再提交前会去检查channel 内存队列是否够用。
  5. doRollback:若channel内存队列空间不足便回滚数据。doRollback方法会进行两项操作:将putList清空; 抛出 ChannelException异常。source会捕捉到doRollback抛出的异常,然后source就将刚才的一批数据重新采集,然后重新开始一个新的事务,这就是事务的回滚。
  6. channel 内存队列够用,那么会将这一批 Event 合并到队列后。

Flume Take 事务

 Take事务流程图
Take事务流程图
  1. 事务开始前,会调用doTake方法拉取数据到takList临时缓冲区中。在sink中也有batchSize 用于定义临时缓冲区(takeList)大小。如Avro Sink的batchSize默认大小为100。
  2. doCommit():会做两个操作: -针对HDFS Sink,手动调用IO流的flush方法,将IO流缓冲区的数据写入到HDFS磁盘中; -清空takeList中的数据

flush到HDFS的时候组容易出问题。flush到HDFS的时候,可能由于网络原因超时导致数据传输失败,这个时候调用doRollback方法来进行回滚,回滚的时候由于takeList中还有备份数据,所以将takeList中的数据原封不动地还给channel,这时候就完成了事务的回滚。

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

对于channel来说,无论是source 还 sink ,它都是属于被动的一方。

本文系转载,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文系转载前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 介绍
  • Flume 中的 put事务
  • Flume Take 事务
相关产品与服务
批量计算
批量计算(BatchCompute,Batch)是为有大数据计算业务的企业、科研单位等提供高性价比且易用的计算服务。批量计算 Batch 可以根据用户提供的批处理规模,智能地管理作业和调动其所需的最佳资源。有了 Batch 的帮助,您可以将精力集中在如何分析和处理数据结果上。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档