概述
flume 的事务机制与可靠性保证的实现,最核心的组件是 channel,如果没有 channel 组件,而仅靠source与sink组件是无从谈起的。
flume 内存通道事务机制
put事务
put事务流程
- doput 将批数据先写入临时缓冲区putList(LinkedBlockingDequeue)链表结构组成的双向阻塞队列。
- doCommit 检查 memoryChannel 内存队列是否足够合并
- doRollback memoryChannel 内存队列空间不足,回滚,等待内存通道容量满足合并
putList 就是一个临时的缓冲区,数据会先put到putList,最后由commit方法检查memoryChannel 是否有足够的缓冲区,有则合并到 memoryChannel 的队列。
take事务
take 事务流程
- doTake 先将数据发往临时缓冲区 takeList(LinkedBlockingDequeue)将输出发送到下一个节点
- doCimmit 如果数据全部发送成功,则清除临时缓冲区takeList
- doRollback 数据发送过程中出现异常,rollback将临时缓冲区takeList中的数据归还给 memoryChannel
- bucketWriter类 会监听数据的发送成功或失败,并响应给 takeList
网友评论