功能:負載均衡
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
