Flume-事务机制,Flume Agent内部原理
文章目录
Flume事务机制
Put事务-流程
doPut:将批数据先写入临时缓冲区 putList
doCommit:检查 channel 内存队列是否足够合并
doRollback:channel 内存队列空间不足,回滚数据
Take 事务流程
doTake:将数据取到临时缓冲区 takeList,并将数据发送到 HDFS
doCommit:如果数据全部发送成功,则清除临时缓冲区 takeList
doRollback:数据发送过程中如果出现异常,rollback 将临时缓冲区 takeList 中的数据归还给 channel 内存队列
Flume Agent内部原理
重要组件:
1)ChannelSelector
ChannelSelector的作用就是选出Event将要被发往哪个Channel。其共有两种类型,分别是Replicating(复制)和Multiplexing(多路复用)。
ReplicatingSelector
:会将同一个Event发往所有与其绑定的Channel中。默认属性可以省略定义
Multiplexing
:会根据相应的原则(根据 Event 的 header头信息中的,不同值),将不同的Event发往不同的Channel。
2)SinkProcessor
Sink Processor:是将一个 flume-agent 中的多个 sink 定义到一个Sinkgroups 组中,使组内多 sink 之间实现故障转移或负载均衡。
共有三种类型:DefaultSinkProcessor、LoadBalancingSinkProcessor和FailoverSinkProcessor
DefaultSinkProcessor:对应的是单个的Sink,
LoadBalancingSinkProcessor
和 FailoverSinkProcessor
:对应的是Sink Group
- Load Balancing Sink Processor 可以实现负载均衡的功能,可以配置同属一个组的多个sink之间负载平衡的能力,支持通过round_robin(轮询)或 random(随机)参数来实现事件的分发,默认情况下使用 round_robin,也可以自定义分发机制,通常是多个sink绑定在同一个channel上
- Failover Sink Processor 可以实现故障转移的功能,通过配置维护了多个sink组成的优先级列表,需要为所有的sink分配优先级,所有的优先级数字必须是唯一的,数字越大表示优先获取channel数据,搭配 Replicating Channel Selector 使用