功能:负载均衡
flume的负载均衡即每次按照一定的算法选择sink输出到指定地方,如果在文件输出量很大的情况下,负载均衡还是很有必要的,通过多个通道输出缓解输出压力
flume内置的负载均衡的算法默认是round robin,轮询算法,按序选择
下面看一下具体实例:
# Name the components on this agent a1.sources = r1 a1.sinks = k1 k2 k3 a1.channels = c1 # Describe/configure the source a1.sources.r1.type = exec a1.sources.r1.channels=c1 a1.sources.r1.command=tail -F /home/test/data/xiaofan.txt #define sinkgroups a1.sinkgroups=g1 a1.sinkgroups.g1.sinks=k1 k2 k3 a1.sinkgroups.g1.processor.type=load_balance a1.sinkgroups.g1.processor.backoff=true # 这个里面是个惩罚机制,会有相关文章进行分析 a1.sinkgroups.g1.processor.selector=round_robin #define the sink 1 a1.sinks.k1.type=avro a1.sinks.k1.hostname=192.168.14.153 a1.sinks.k1.port=41414 #define the sink 2 a1.sinks.k2.type=avro a1.sinks.k2.hostname=192.168.14.176 a1.sinks.k2.port=41414 #define the sink 3 a1.sinks.k3.type=avro a1.sinks.k3.hostname=192.168.14.171 a1.sinks.k3.port=41414 # Use a channel which buffers events in memory a1.channels.c1.type = memory a1.channels.c1.capacity = 1000 a1.channels.c1.transactionCapacity = 100 # Bind the source and sink to the channel a1.sources.r1.channels = c1 a1.sinks.k1.channel = c1 a1.sinks.k2.channel=c1 a1.sinks.k3.channel=c1
小结
1.当三台主机中的一台进程挂掉后,发送端会报错误,但是不影响数据的发送。
2.当挂掉的进程回复后,会继续被接受数据。这里面有个惩罚机制,如果开启的失败的接受端会被等待延迟!
3.当挂掉的进程回复后,发送端会自动添加会发送列表里,报错消失!
4.这个就是一个简单的均衡方式,相当于见了一个sink组,在sink组中的数据被轮询发送!
功能:容错环境的搭建failover
这个地方上面有个小区别,请根据相关需求处理。
上面的是负载均衡,每台机器都会受到数据处理数据,但是有时候业务需求可能需要一台机器为主要一条业务的数据接收器,另一个台在挂掉后才会被启用,这时候这个就有用了。
比如:三台接受机:s1:a业务数据,s2:b业务数据,s3:c业务数据
就可以这样设计了:
s1上配置优先级:s1》s2》s3
s2上配置优先级:s2》s3》s1
s3上配置优先级:s3》s1》s2
只需要和上面一点不同:
#priority越高,优先级越高,会优先使用该sink a1.sinkgroups=g1 a1.sinkgroups.g1.sinks=k1 k2 a1.sinkgroups.g1.processor.type=failover a1.sinkgroups.g1.processor.priority.k1=10 a1.sinkgroups.g1.processor.priority.k2=5 a1.sinkgroups.g1.processor.maxpenalty=10000