事务总结 put事务 take事务 理解"/>
Flume 事务总结 put事务 take事务 理解
我们都知道Flume是一个日志文件传输的工具,传输过程会经过三大步骤:
1.通过source 把数据从数据源(网络端口,本地磁盘等)读出出来
2.通过source把数据传入到channel里面
3.再把数据从channel传输到sink里面,sink把数据传给目的地(hdfs).
当然传输数据的过程并不是只有这三个步骤,flume 竟然是传输数据的,所以得考虑到数据传输时数据的完整性 . Flume在传输数据的时候很有可能因为传输速率的不一致导致channel满了,从而导致数据丢失。
channel是被动的,source这边是主动把数据put给channel,sink这边是主动把数据从channel拉取take,所以channel是被动操作的。
一般channel使用MemoryChannel,这是内存的,断电会丢失数据,也可以使用filechannel(磁盘),filechannel速度慢,但有提供日志级别的数据恢复功能,不过不断电MemoryChannel是不会丢数据的,所以一般选用memorychannel也OK。
source把数据传给channel 时不是直接传给channel,中间还有put事务,当然从channel到sink也不是直接传过去的,中间还有take事务。
put事务步骤:
doput :先将批数据写入临时缓冲区putlist里面
docommit:去检查channel里面有没有空位置,如果有就传入数据,如果没有那么dorollback就把数据回滚到putlist里面。
take事务步骤:
dotake:将数据读取到临时缓冲区takelist,并将数据传到hdfs上。
docommit :去判断数据发送是否成功,若成功那么清除临时缓冲区takelist
若不成功(比如hdfs系统服务器崩溃等)那么dorollback将数据回滚到channel里面。
数据在传输到下个节点时(一般是批量数据),假设接收节点出现异常,比方网络异常。则回滚这一批数据,因此有可能导致数据重发(是重发不是重复)。
同个节点内,Source写入数据到Channel,数据在一个批次内的数据出现异常,则不写入到Channel,已接收到的部分数据直接抛弃,靠上一个节点重发数据。
通过这两个事务,Flume提高了数据传输的完整性,准确性。
Flume监控
发现了一个非常好的文章,可以去了解一下Flume 监控的方式
Flume 监控方式:
更多推荐
Flume 事务总结 put事务 take事务 理解
发布评论