背景
??????? Flume是由Cloudera公司開源的,分布式可靠,高可用的系統,它能夠將不同數據源的海量日志數據進行高效收集、聚合、移動、最后存儲到一個中心化數據存儲系統中。由原來的Flume OG到現在的Flume NG,進行了架構重構,并且現在NG版本完全不兼容原來的OG版本,經過架構重構后,Flume NG更像是一個輕量級的小工具,適應各種方式的日志收集,并支持failover和負載均衡
版本
???? 兩個版本:Flume OG和Flume NG
???? Flume OG:0.9.x或cdh3以及更早的版本,由agent、collector、master等組件構成
???? Flume NG:1.x或cdh4以及之后的版本,由Agent、client等組件構成
???? Flume OG存在的問題:
???????????? 1.代碼工程臃腫
?????????? ? 2.核心組件設計不合理
???????????? 3.核心配置不標準
???????????? 4.日志傳輸不穩定
? Flume NG的特點:
????????? ? 1.NG只有一種角色的節點:代理節點(Agent)
??????????? 2.沒有collector,master節點,這是核心組件最核心的變化
??????????? 3.去除了physical nodes,local nodes 的概念和相關內容
??????????? 4.agent節點的組成也發生了變化,脫離了zookeeper
架構設計
??????????
架構優勢
?????? NG在核心組件上進行了大規模的調整
?????? 大大地降低了對用戶的要求,如用戶無需搭建zookeeper集群
??????? 用戶也不用糾結于OG的模糊概念
??????? 有利于Flume和其他技術、hadoop周邊組件的整合
??????? 在功能上更加強大、可擴展性更高
組件
??????? Event:一個數據單元,帶有一個可選的消息頭
?????? Client:是一個將原始log包裝成events并且發送它們到一個或多個agent的實體,在flume的拓撲結構中不是必須的
?????? Agent:一個獨立的flume進程,包含組件source,channel,sink,其他組件,它利用這些組件將events從一個節點傳輸到另一個節點或最終目的,是flume流的基礎部分
???????????? Source:負責接收event或通過特殊機制產生event,并將events批量的放到一個或多個Channel,必須至少和一個channel關聯
???????????? Channel:中轉Event的一個臨時存儲,保存有source組件傳遞過來的Event,當sink成功的將event發送到下一個channel或最終目的,event從Channel移除,不同的channel提供的持久化水平是不一樣的
???????????? Sink:負責將event傳輸到下一跳或最終目的,成功后將event從channel移除,必須作用一個確切的channel
??????? 其他組件:
????????????? Interceptor:
????????????????? 作用于source,按照預設的順序在必要的地方裝飾和過濾events
???????????? Channel Selector :
????????????????? 允許source基于預設的標準,從所有的channel中,選擇一個或多個Channel
???????????? Sink Processor
?????????????????? 多個sink可以構成一個sink group,Sink Processor 可以通過組中所有sink實現負載均衡,也可以在一個sink失敗時轉移到另一個
????? Flow:Event從源點到達目的點的遷移的抽象
配置實例
??? ? ? 注意:同一個Source可以將數據存儲到多個Channel,實際上是Replication,一個sink只能從一個Channel中讀取數據
???? 1.多個Agent順序連接
??????????
可以將多個Agent順序連接起來,將最初的數據源經過收集,存儲到最終的存儲系統,應該控制這種順序連接的Agent的數量,因為數據流經的路徑變長了,如果不考慮failover的話,出現故障將影響整個Flow上的Agent收集服務
???? 2.多個Agent的數據匯聚到同一個Agent
?????????????
?????? 這種情景應用的場景比較多,比如要收集Web網站的用戶行為日志,Web網站為了可用性使用的負載均衡的集群模式,每個節點都產生用戶行為日志,可以為每個節點都配置一個Agent來單獨收集日志數據,然后多個Agent將數據最終匯聚到一個用來存儲數據存儲系統,如HDFS上
???? 3.多路Agent
???????????
????????? 這種模式,有兩種方式,一種是用來復制,另一種是用來分流
????????? 配置文件中指定selector的type的值為replication:復制
???????? 配置文件中指定selector的type的值為Multiplexing:分流
實現load balance功能
????????
? ? ? ? ? ? ? ? ? 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
??????????????? a1.sinkgroups.g1.processor.selector.maxTimeOut = 10000
實現failover功能
?????????????? Failover Sink Processor 能夠實現failover功能,具體流程類似load balance,但是內部處理機制與load balance完全不一樣:Failover Sink Processor維護一個優先級Sink組件的列表,只要有一個Sink可用,Event就被傳遞到下一個組件,如果一個sink能夠成功處理Event,則會加入到一個Pool中,否則就被移除Pool并計算失敗次數,設置一個懲罰因子
? ? ? ? ? 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=6
??????? a1.sinkgroups.g1.processor.priority.k3=7
?????? a1.sinkgroups.g1.processor.maxpenalty=2000
快速進入安裝配置: Flume介紹之安裝配置?