Flume事务

Flume的事务有两部分

source到channel中有着put事务,作用是当缓冲区发生异常,数据不会直接丢失,而是回滚事务,当然回滚到source的数据,虽然会在一定时间之后再次推送到缓冲区,但是如果一直推不进去,那我们就要去考虑为什么了

channel到sink之间有着take事物,它的作用是让sink主动的去获取数据,如果发生了异常,就会将数据还给channel

下面给大家用我的理解说一说,不一定完全对,但是也大差不差了,首先大家看一眼下面的图,方便后期理解我在说什么
在这里插入图片描述
首先如开头说的那样,source不会直接将数据发送给channel,两者间有“put事务”存在,两者间处理事务的组件叫channelprocessor,source会将数据先封装成一个个的event,之后交给事务组件,由事务组件经过拦截器进行过滤,拦截器有默认的,就比如监控路径的时候指定的各种忽略参数,当然不设置拦截器就是为一路绿灯,event从拦截器出来之后,到达负责event分发的组件channelselector

这里要先说一下source和channel的关系,一个source可以有多个channel,这也是我们书写agent文件关联流程的时候用的是a1.sources.r1.channel“s”,同理我们使用a1.sinks.k1.channel没有“s”意味着一个sink只能有一个channel

言归正传分发组件有两种可选分发机制,一是默认的会发给所有对应的channel叫做replicating,另一种Multiplexing可以设置发送方式,我们一般如有需要会使用multiplexing,无论哪种类型,如果发送成功则事务成功提交,如果失败,回滚事务

channel到sink有着take事务,事务组件是sinkprossor,它的流程流简单多了,它的目的就只是让sink读取channel的数据,如果读取失败则回滚事务,成功则提交事务,但是它有三个类型有着不同的功能

默认的DefaultSinkProcessor,对应的是单个的Sink的读取进行事务的运行

其他两种是LoadBalancingSinkProcessor和FailoverSinkProcessor,对应的是Sink Group,也就是多个sink,LoadBalancingSinkProcessor可以实现负载均衡的功能,FailoverSinkProcessor有错误恢复的功能

最后告诉大家两个事情,一是sink拿数据在设计的时候,是针对channel中都是有用数据设计的,因此sink其实只做用数据,而不涉及其他的过滤等其他操作,而是一个source可以有多个channel,一个channel可以有多个sink,但是反过来,一个sink只能有一个channel,而一个channel是不是只能有一个source大家可以自己去实验一下

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值