Flume的load-balance、failover

負載均衡是用於解決一臺機器(一個進程)無法解決所有請求而產生的一種算法。Load balancing Sink Processor能夠實現load balance功能,如下圖Agent1是一個路由節點,負責將Channel暫存的Event均衡到對應的多個Sink組件上,而每個Sink組件分別連接到一個獨立的Agent上,示例配置,如下所示:
Flume的load-balance、failover
a1.sinkgroups = g1
a1.sinkgroups.g1.sinks = k1 k2 k3
a1.sinkgroups.g1.processor.type = load_balance
a1.sinkgroups.g1.processor.backoff = true #如果開啓,則將失敗的sink放入黑名單
a1.sinkgroups.g1.processor.selector = round_robin # 另外還支持random
a1.sinkgroups.g1.processor.selector.maxTimeOut=10000 #在黑名單放置的超時時間,超時結束時,若仍然無法接收,則超時時間呈指數增長

Failover Sink Processor能夠實現failover功能,具體流程類似load balance,但是內部處理機制與load balance完全不同。
Failover Sink Processor維護一個優先級Sink組件列表,只要有一個Sink組件可用,Event就被傳遞到下一個組件。故障轉移機制的作用是將失敗的Sink降級到一個池,在這些池中它們被分配一個冷卻時間,隨着故障的連續,在重試之前冷卻時間增加。一旦Sink成功發送一個事件,它將恢復到活動池。 Sink具有與之相關的優先級,數量越大,優先級越高。
例如,具有優先級爲100的sink在優先級爲80的Sink之前被激活。如果在發送事件時匯聚失敗,則接下來將嘗試下一個具有最高優先級的Sink發送事件。如果沒有指定優先級,則根據在配置中指定Sink的順序來確定優先級。
示例配置如下所示:
a1.sinkgroups = g1
a1.sinkgroups.g1.sinks = k1 k2 k3
a1.sinkgroups.g1.processor.type = failover
a1.sinkgroups.g1.processor.priority.k1 = 5 #優先級值, 絕對值越大表示優先級越高
a1.sinkgroups.g1.processor.priority.k2 = 7
a1.sinkgroups.g1.processor.priority.k3 = 6
a1.sinkgroups.g1.processor.maxpenalty = 20000 #失敗的Sink的最大回退期(millis)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章