what's flume?
flume 是系統, 是高可用的,高可靠的,分布式的海量數據日志采集,聚合和傳輸的系統
總結就是 兩個特點。高可用,高可靠 三個功能:數據的采集,聚合和傳輸.。
體系架構:
F的數據流是由事件(event)貫穿始終。事件是F的基本數據單位。事件攜帶著這事件所有數據內容信息和數據頭信息。這些事件(event) 由Agent外部的Source 生成。當Source捕獲事件后會進行特定格式化。然后Source 會把事件推入到單個或者多個channel中,可以把channel看做是緩沖區,起到緩沖數據的作用,這channel將保存事件直到sink 處理完該事件。sink 負責持久化日志或者把事件推向另一個source中
F以agent 為最小的獨立運行單位。 一個agent 就是一個jvm d單agent 由Source ,sink,channel 三大組件構成
看我手繪圖
百度——非原創
系統功能
日志收集
Flume最早是Cloudera提供的日志收集系統,目前是Apache下的一個孵化項目,Flume支持在日志系統中定制各類數據發送方,用于收集數據。
數據處理
Flume提供對數據進行簡單處理,并寫到各種數據接受方(可定制)的能力
Flume提供了從console(控制臺)、RPC(Thrift-RPC)、text(文件)、tail(UNIX
tail)、syslog(syslog日志系統,支持TCP和UDP等2種模式),exec(命令執行)等數據源上收集數據的能力。
工作方式
Flume-og采用了多Master的方式。為了保證配置數據的一致性,Flume引入了ZooKeeper,用于保存配置數據,ZooKeeper本身可保證配置數據的一致性和高可用,另外,在配置數據發生變化時,ZooKeeper可以通知Flume
Master節點。Flume Master間使用gossip協議同步數據。
Flume-ng最明顯的改動就是取消了集中管理配置的 Master 和
Zookeeper,變為一個純粹的傳輸工具。Flume-ng另一個主要的不同點是讀入數據和寫出數據現在由不同的工作線程處理(稱為
Runner)。 在 Flume-og 中,讀入線程同樣做寫出工作(除了故障重試)。如果寫出慢的話(不是完全失敗),它將阻塞 Flume
接收數據的能力。這種異步的設計使讀入線程可以順暢的工作而無需關注下游的任何問題。
agent從各個數據源收集日志數據,將收集到的數據集中到collector,然后由收集節點匯總存入hdfs。master負責管理agent,collector的活動。
在Flume中,最重要的抽象是dataflow(數據流),data flow描述了數據從產生,傳輸、處理并最終寫入目標的一條路徑。
對于agent數據流配置就是從哪得到數據,把數據發送到哪個collector。
對于collector是接收agent發過來的數據,把數據發送到指定的目標機器上。
Flume框架對Hadoop和zookeeper的依賴只是在jar包上,并不要求flume啟動時必須將hadoop和zookeeper服務也啟動。