Flume的特性
-
可靠性:事务型的数据传递,保证数据的可靠性。一个日志交给flume来处理,不会出现此日志丢失或未被处理的情况 ;
- 消息(批量)通过每个Agent的channel,然后发送给下一个Agent或者最终的存储平台。只有当下一个agent或者最终的存储平台接收并保存后,才会从Channel中移除。这也是Flume(单跳,single-hop)传送语义中如何提供端对端的数据流可靠性的。
- Flume使用事务方式来保证消息传输的可靠性(这一点非常重要)。Sources和Sinks在存储、检索的操作都会分别分装在由Channel提供的事务中,这可以确保一组消息在Flow内部点对点传递的可靠性(source->channel->sink)。即使在多级Flows模式中,上一级的sink和下一级的source之间的数据传输也运行在各自的事务中,以确保数据可以安全的被存储在下一级的channel中。
-
可恢复性:通道可以以内存或文件的方式实现,内存更快,但不可恢复。文件较慢但提供了可恢复性
- Flume支持持久类型的FileChannel,即Channel的消息可以被保存在本地的文件系统中,这种Channel支持数据恢复。此外,还支持MemoryChannel,它是基于内存的队列,效率很高但是当Agent进程失效后,那些遗留在Channel中的消息将会丢失(而无法恢复)。
Flume的事务机制
- Flume的事务机制与可靠性保证的实现,最核心的组件是Channel(通道)。如果没有Channel组件,而紧靠Source与Sink组件是无从谈起的
文件通道指的是将事件存储到代理(Agent)本地文件系统中的通道。虽然要比内存通道慢一些,不过它却提供了持久化的存储路径,可以应对大多数情
况,它应该用在数据流中不允许出现缺口的场合 - 文件通道指的是将事件存储到代理(Agent)本地文件系统中的通道。虽然要比内存通道慢一些,不过它却提供了持久化的存储路径,可以应对大多数情
况,它应该用在数据流中不允许出现缺口的场合 - File channel虽然提供了持久化,但是其性能较差,吞吐量会受到一定的限制。相反,memory channel则牺牲可靠性换取吞吐量。当然,如果机器断电重
启,则无法恢复。在实际应用中,大多数企业都是选择内存通道,因为在通过flume收集海量数据场景下,使用FileChannel所带来的性能下降是很大的甚
至是无法忍受的
2.1 推送事务流程
doPut: 把批数据写入到临时缓冲区putList
doCommit: 检查Channel容量是否足够,如果容量足够则把putList里的数据发送到Channel
doRollBack:如果Channel容量不够,则把数据回滚到putList
2.2 拉取事务流程
doTake:把数据读取到临时缓冲区takeList
doCommit:检查数据是否发送成功,成功的话,则把event从takeList中移除
doRollBack:如何发送失败,则把takeList的数据回滚数据到Channel
原文链接:https://blog.youkuaiyun.com/u010452388/article/details/101697570
put事务流程
1. doPut:将批数据先写入临时缓冲区putList(Linkedblockingdequeue)
4. doCommit:检查channel内存队列是否足够合并。
5. doRollback:channel内存队列空间不足,回滚,等待内存通道的容量满足合并
6. putList就是一个临时的缓冲区,数据会先put到putList,最后由commit方法会检查channel是否有足够的缓冲区,有则合并到channel的队列
Take事务
1. doTake:先将数据取到临时缓冲区takeList(linkedBlockingDequeue)
2. 将数据发送到下一个节点
3. doCommit:如果数据全部发送成功,则清除临时缓冲区takeList
4. doRollback:数据发送过程中如果出现异常,rollback将临时缓冲区takeList中的数据归还给channel内存队列
1018

被折叠的 条评论
为什么被折叠?



