Flume之多层代理

为什么需要多层代理

当我们用 Flume 采集日志时,由于数据源的多样性,则往往需要配置多个Flume 进行采集,如果只是使用单层 Flume 的话,那么往往会产生很多个文件夹,单个文件夹也只是来自同一个节点的数据组成的。

而实际开发中,为了减少HDFS 的压力,同时提高后续 MR 的处理效率。往往会将同一组多个节点的数据汇聚到同一个文件中,这样同时也较少了数据从生产到分析的时间。

如下图,第一次 agent 负责采集原始数据,第二层 agent 负责对第一层数据进行汇聚。这种多层代理的方式尤其适合 source 源数据量庞大的时候,效率会高很多。

多路复用流程

Flume支持复用event流向一个或多个目的地。通过定义可复制或者选择性地将event路由到一个或多个channels的流复用器实现。

在这里插入图片描述
上述例子展示了一个agent "foo"的source把流量分散到三个不同的channels。这分散可以被复制或复用。在复制流量的情况下,每个event都被发送到三个channels。
对于复用情况,当一个event的属性匹配到预配置的值时,该event被传递到可用channels的子集。

例如,如果一个event属性“txnType” 被设置为“customer”,然后它应该去channel1和channel3,如果它是“vendor”,然后它应该去channel2,否则channel3。这个映射可以设置在agent的配置文件中。

如果没有手动配置,source 的默认 channel 选择器类型是 replicating(复制),当然这个选择器只针对 source 配置了多个 channel 的时候。
前面介绍过,一个source 可以向多个 channel 同时写数据,所以也就产生了以何种方式向多个
channel 写的问题(比如自带的复制选择器 ,会把数据完整地发送到每一个channel,而多路复用选择器 就可以通过配置来按照一定的规则进行分发,听起来很像负载均衡),channel 选择器也就应运而生。

1. 复制选择器
a1.sources = r1
a1.channels = c1 c2 c3
a1.sources.r1.selector.type = replicating
a1.sources.r1.channels = c1 c2 c3

#向 c3 发送失败将忽略
a1.sources.r1.selector.optional = c3 

上面这个例子中,c3 配置成了可选的。向 c3 发送数据如果失败了会被忽略。
c1 和 c2 没有配置成可选的,向 c1 和 c2 写数据失败会导致事务失败回滚。

2. 多路复用选择器
a1.sources = r1
a1.cha
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值