flume的事务实现

Flume的事务机制确保了数据从source到channel,再到sink的可靠性。内存通道memory channel维护put和take事务,doPut由source触发,doTake由sink触发。在异常情况下,doRollback会回滚事件,保持数据一致性。事务机制采用At-least-once提交方式,可能导致事件重复,但保证了高容量数据传递的可靠性。批处理机制提高效率,如Kafka source以批处理方式处理事件。
摘要由CSDN通过智能技术生成

在flume的内部实现中事务是一个重要的概念,事务保证了数据的可用性(有别于数据库中的事务)。

下图的数据流是spooling directory source-> memory channel-> kafka sink,其中memory channel维护了两个事务,分别是put事务和take事务。

 

下面简要介绍一下事务的代码实现:

1. doPut(放入event),该操作由source触发。

1.1 一般的source会在process方法中,将event提交到channel。但是spoolingdirectorysource比较特殊,它针对一个本地目录创建了ReliableSpoolingFileEventReader对象, 并起一个定时线程去读取其中的文件。在线程中,取到一批event后(文件中一行即为一个event),直接调用ChannelProcessor的processEventBatch方法,将这批数据提交到channel中。

1.2 在ChannelProcessor对象中,调用栈为:reqChannel.put(event) -> BasicChannelSemantics.put -> BasicTransactionSemantics.put -> BasicTransactionSemantics.doPut。其中doPut是一个抽象方法,其具体实现放在各个channel的Transaction中。这里

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值