Load balancing Sink Processor

負載均衡的sink processor! Load balancing Sink Processor維持了sink組中active狀态的sink.
使用round_robin(輪詢) 或 random(随機) 算法,來分散sink組中存活的sink之間的負載
假設目前sink組裡面有三個sink, 這時候Load balancing Sink Processor 隻會維護存活狀态的sink,如果某個sink挂掉了就會從sink組裡面去掉.
然後發送資料的時候就根據sink組裡面兩個存活的sink裡面,找一個來發送資料,至于找哪個skin發送就得看是使用round_robin(輪詢) 還是random(随機) 算法
必需配置:
processor.sinks – Space-separated list of sinks that are participating in the group
processor.type default The component type name, needs to be load_balance
案例
使用Flume1監控一個端口,其sink組中的sink分别對接Flume2和Flume3,采用Load balancing Sink Processor實作負載均衡功能,讓Flume2和FLume3輪詢發送
開始編寫配置檔案
配置檔案名字都叫demo4.conf
都放到/root/soft/apache-flume-1.7.0/conf/job/路徑下面
zjj101
#a1是agent的名稱,a1中定義了一個叫r1的source,如果有多個,使用空格間隔
a1.sources = r1
a1.sinks = k1 k2
a1.channels = c1
# 配置sink組
a1.sinkgroups = g1
a1.sinkgroups.g1.sinks = k1 k2
# 配置使用負載均衡政策
a1.sinkgroups.g1.processor.type = load_balance
# k1 k2輪流幹活兒
a1.sinkgroups.g1.processor.sinks=k1 k2
#組名名.屬性名=屬性值
a1.sources.r1.type=exec
a1.sources.r1.command=tail -f /root/soft/test.log
#聲明r1的channel選擇器
a1.sources.r1.selector.type = replicating
#定義chanel
a1.channels.c1.type=memory
a1.channels.c1.capacity=1000
##定義sink
a1.sinks.k1.type=avro
a1.sinks.k1.hostname=zjj102
a1.sinks.k1.port=33333
a1.sinks.k2.type=avro
a1.sinks.k2.hostname=zjj103
a1.sinks.k2.port=33333
#連接配接元件 同一個source可以對接多個channel,一個sink隻能從一個channel拿資料!
a1.sources.r1.channels=c1
a1.sinks.k1.channel=c1
a1.sinks.k2.channel=c1
zjj102
a1.sources = r1
a1.sinks = k1
a1.channels = c1
#組名名.屬性名=屬性值
a1.sources.r1.type=avro
a1.sources.r1.bind=zjj102
a1.sources.r1.port=33333
#定義sink
a1.sinks.k1.type=logger
#定義chanel
a1.channels.c1.type=memory
a1.channels.c1.capacity=1000
#連接配接元件 同一個source可以對接多個channel,一個sink隻能從一個channel拿資料!
a1.sources.r1.channels=c1
a1.sinks.k1.channel=c1
zjj103
a1.sources = r1
a1.sinks = k1
a1.channels = c1
#組名名.屬性名=屬性值
a1.sources.r1.type=avro
a1.sources.r1.bind=zjj103
a1.sources.r1.port=33333
#定義sink
a1.sinks.k1.type=logger
#定義chanel
a1.channels.c1.type=memory
a1.channels.c1.capacity=1000
#連接配接元件 同一個source可以對接多個channel,一個sink隻能從一個channel拿資料!
a1.sources.r1.channels=c1
a1.sinks.k1.channel=c1
啟動項目
啟動順序是 zjj101 必須要在 zjj102 zjj103 之後啟動,因為zjj102 和zjj103開放監聽了端口.
啟動zjj102
flume-ng agent -n a1 -c conf/ -f "/root/soft/apache-flume-1.7.0/conf/job/demo4.conf" -Dflume.root.logger=DEBUG,console
啟動zjj103
flume-ng agent -n a1 -c conf/ -f "/root/soft/apache-flume-1.7.0/conf/job/demo4.conf" -Dflume.root.logger=DEBUG,console
啟動zjj101
flume-ng agent -n a1 -c conf/ -f "/root/soft/apache-flume-1.7.0/conf/job/demo4.conf" -Dflume.root.logger=DEBUG,console
測試
再開一個zjj101終端
往test.log裡面輸出内容
[root@zjj101 soft]# echo 13115464564561 >> test.log
[root@zjj101 soft]# echo 13115464564561 >> test.log
[root@zjj101 soft]# echo 1311546561 >> test.log
[root@zjj101 soft]# echo 131151 >> test.log
[root@zjj101 soft]# pwd
/root/soft
此時觀察zjj102 和zjj103日志發現,zjj102和zjj103機器是輪詢接收消息的.就是你接收一條我接收一條消息.
[root@zjj101 soft]# echo 51 >> test.log
[root@zjj101 soft]# echo 51 >> test.log
[root@zjj101 soft]# echo 51 >> test.log