首页 > Web开发 > 详细

flume实现sink之间的负载均衡

时间:2016-04-09 02:05:03      阅读:2755      评论:0      收藏:0      [点我收藏+]

一:为什么需要load-balancing?sink

??试想一下,通常,咱们的服务会有成千上万的数据源通过flume写入诸如hdfs这样的存储系统,在我们将采集的数据写入存储系统之前,如果都是一次性通过 source直接将数据写入hdfs,那么势必会给namenode和hdfs集群造成压力,而flume的可扩展性告诉我们,我们可以通过分层的形式将数据写入相应的sink,如下图:
bubuko.com,布布扣

? 正如你看到的,有这样一个拓扑结构不仅能够充分利用网络资源,也不会浪费CPU周期和较高的I/O开销。

sink有一个组的概念,一个sink组里面可以包含多个sink,我们可以使用load-balancing?sink处理器来实现多个sink之间的负载均衡

我们先来看一下load-balancing的配置

type:必须写成load_balancing

selector:可以设置成round_robin或random,或者自己实现

backoff:默认是false,如果设置为true,那么失败的sink将会被加入黑名单,加入的时间以指数形式增长.

selector.maxTimeOut:毫秒级时间,超过这个时间后,黑名单的时间周期不在增长。

二:示例

agent的配置文件如下
bubuko.com,布布扣
?
bubuko.com,布布扣

?

Sink 组g1里面有2个sink,分别是k1,k2,2个sink之间保证负载均衡,如果其中某一个sink挂了,将会被加入黑名单,sink下次轮询的时候就 不会再次尝试去请求挂了的sink,直到回退时间过期。轮询时才会再次请求,如果之前挂调的sink重新恢复了,那么就可以再次处理数据。

? 监控的是flumeSpool目录下面的文件,当我们启动这个agent,flume监控到目录下面有数据就会立即通过复制的方式往2个Avro?RPC端口放数据,先启动k1,k2
bubuko.com,布布扣
bubuko.com,布布扣

启动agent
bubuko.com,布布扣

? 在数据量比较大的情况下,往监控目录下面放数据,会发现,k1,k2基本会实现接收数据的平衡。效果:

端口4444的sink
bubuko.com,布布扣

端口5555的sink
bubuko.com,布布扣

发现2个sink接收的数据不会相同,但基本会保持平衡,不会给某一个sink造成太多的压力。

flume实现sink之间的负载均衡

原文:http://090508tanjie.iteye.com/blog/2289426

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!