Flume-事务机制,Flume Agent内部原理

Flume事务机制

在这里插入图片描述
Source到Channel为-Put事务-流程
doPut:将批数据先写入临时缓冲区 putList
doCommit:检查 channel 内存队列是否足够合并
doRollback:channel 内存队列空间不足,回滚数据

Channel到Sink为-Take事务-流程
doTake:将数据取到临时缓冲区 takeList,并将数据发送到 HDFS
doCommit:如果数据全部发送成功,则清除临时缓冲区 takeList
doRollback:数据发送过程中如果出现异常,rollback 将临时缓冲区 takeList 中的数据归还给 channel 内存队列

数据丢失问题?

根据Flume的架构原理,采用FileChannel的Flume是不可能丢失数据的,因为其内部有完善的事务机制(ACID)。

put 和 take 这两个事务是独立的,并且这两个环节都不可能丢失数据,唯一可能丢失数据的是 Channel 采用 MemoryChannel

  • [1 ] 在 Agent 宕机时候导致数据在内存中丢失
  • [2 ] Channel 存储数据已满,导致 Source 不再写入数据,造成未写入的数据丢失

注:Flume不会丢失数据,但是可能会造成数据重复,例如数据已经由Sink发出,但是没有接收到响应,Sink会再次发送数据,导致数据重复

Flume Agent内部原理

在这里插入图片描述
重要组件:

1)Channel Selector

Channel Selector 的作用就是选出 Event 将要被发往哪个 Channel。其共有两种类型,分别是Replicating(复制)Multiplexing(多路复用)

Replicating Channel Selector:会将同一个Event发往所有与其绑定的Channel中。默认属性可以省略定义

Multiplexing Channel Selector:会根据相应的原则(根据 Event 的 header中 key对应的value值不同),将不同的Event发往不同的Channel。

2)Sink Processor

Sink Processor:是将一个 flume-agent 中的多个 sink 定义到一个Sinkgroups 组中,使组内多 sink 之间实现 故障转移 或 负载均衡。
共有三种类型:DefaultSinkProcessor、LoadBalancingSinkProcessorFailoverSinkProcessor

DefaultSinkProcessor:对应的是单个的Sink

LoadBalancingSinkProcessorFailoverSinkProcessor:对应的是Sink Group

  • Load Balancing Sink Processor :可以实现负载均衡的功能,可以配置同属一个组的多个 sink 之间负载平衡的能力,支持通过round_robin(轮询)或 random(随机)参数来实现事件的分发,默认情况下使用 round_robin,也可以自定义分发机制,通常是多个sink绑定在同一个channel上
    在这里插入图片描述

  • Failover Sink Processor :可以实现故障转移的功能,通过配置维护了多个 sink 组成的优先级列表,需要为所有的sink分配优先级,所有的优先级数字必须是唯一的,数字越大表示优先获取channel数据,搭配 Replicating Channel Selector 使用在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值