学习内容
一、flume事物
上图所示
Source向Channel推送数据前会开启一个Put事物
Put事物流程:
- 调用doPut方法将数据先写入到临时缓冲区putList
- 再调用doCommit方法检测channel内存队列是否足够
- 如果内存够则将数据写入到channel中,如果内存空间不够则调用doRollback方法,回滚数据,将数据写入到source中
sink向Channel拉取数据前会开启一个Take事物
Take事物流程:
- 调用doTake将数据先写入到临时缓冲区takeList中,之后将数据发送到HDFS中
- 再调用doCommit方法,如果数据全部发送成功,则清除临时缓冲区takeList
- 如果发生不成功则调用doRollback方法,将临时缓冲区takeList中的数据归还给channel内存队列
二、flume内部原理
- Source接收数据
- Source将数据传给Channel Processor(处理器)
- 将事件传给拦截器(进行数据的处理),然后再将数据传给Channel Processor
- Channel Processor将数据发送给Channel Selector(选择器)
选择器有两大策略:
①Replicatiing Channel Selector(默认的)复制机制:将Source发来的数据发给所有的Channel。比如一个Source绑定了两个Channel,就把同样的一份数据发给两个Channel
②Multiplexing Channel Selector多路复用机制:可以配置参数,将Source发来的数据选择性的发给哪些Channel - 然后数据再返回给Channel Processor(处理器)
- 根据上面的选择器的策略,将事件写入相应的Channel
- sink Processor(sink组)主动向Channel拉取数据
三种拉取策略:
①DefaultSinkProcessor:对应的是单个Sink
②LoadBalancingSinkProcessor:可以实现负载均衡的功能,数据分散给多个sink拉取数据
③FailoverSinkProcessor:故障转移,可以错误恢复的功能。可以在多个sink中设置优先级,比如优先级最高的sink在拉取数据时挂掉了,那么在剩下的sink中,选择优先级最高的继续进行拉取数据;如果挂掉的sink恢复了,则会使用优先级最高的进行拉取数据