研讀《基於Hadoop的海量業務數據分析平臺的設計與實現》----flume一章學習小結

flume簡單介紹

flume把收集的這些大量的日誌數據傳輸給指定目標的數據倉庫中,flume支持多種不同的數據源,比如控制檯,文本文件,系統日誌文件等等,同時也支持多種目標的數據存儲系統,比如數據庫系統,文本文件,分佈式文件系統等等。

flume的傳輸方式是以數據流做爲傳輸的載體。其本質就是做爲一個數據傳輸的通道,把數據從初始端傳輸到目的端等,如下圖爲數據流模型。


agent是flume的主要組成部分,是一個獨立的進程,它能夠接收數據並且將數據傳送給指定的位置。一個agent包含source、 channel,sink三個重要的部分,source是接收數據的,是數據傳輸的開端,channel是傳輸數據的通道,接收來自source端的數據並且進行短暫的存儲,等待sink進程的獲取,channel可以爲內存方式,也可以爲JDBC方式等等,sink拿到channel的數據之後會把數據傳輸到指定的目的地文件系統或者下一個source進行數據的傳輸。,然後會移除channel中的相應數據,channel支持source和sink兩種數據交換模式,類似於經典的生產者----消費者模式。source做爲生產者生產數據,channel做爲source生產的產品存儲的倉庫,而sink做爲消費者,只要channel有產品,sink就會消費,這能夠合理的,有效的利用系統資源。

flume支持一個source傳輸給多個channel,數據最終到達目的地數據傳輸模式。


flume實現數據的聚合,能夠把多個source彙總到一個channel,比如下圖所示


數據聚合流程

flume這種通過agent進行數據傳輸的方式保證了數據的一致性,數據從一個agent傳遞給下一個agent的時候,flume會啓動兩個進程,前一個agent的sink負責把數據寫入到下一個agent的source端口,後一個agent接收到數據以後進行下一步的傳輸,後一個agent在事務提交之後會給前一個agent返回一個成功接收的信息,前一個agent接收到後一個agent的成功信息以後纔會提交自己的事務,這種方式確保了數據才傳輸的過程中不會丟失,這種數據傳輸機制也是flume失效以後數據得以恢復的基礎,當數據在多個agent之間傳輸錯誤時,前一個agent會緩存這些數據,當後面的agent恢復以後,可以繼續傳輸這些數據,但是這種緩存是被動的,當agent長時間沒有恢復,最終很有可能導致數據的丟失,下圖爲傳輸成功的時序圖。


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