flume中的一些重要的知識點
flume中的一些重要的知識點
##1.flume的架構
client:客戶端,執行agent的地方
source:資料來源,負責接收資料
channel:管道,負責接收source端的資料,然後將資料推送到sink端
sink:接收channel端的資料並且持久化到目的系統
ineterceptor:攔截器,作用於source和sink,flume允許使用攔截器攔截資料
selector:選擇器,作用於source端,決定資料傳送的方式.
event:事件,相當於一條資料
agent:flume的客戶端,一個agent執行在一個jvm裡面,agent是flume執行的最小單元
2.如何保證資料的完整性
一:Flume的事務機制
Flume的事務機制(類似資料庫的事務機制):Flume使用兩個獨立的事務分別負責從soucrce到channel,以及從channel到sink的事件傳遞。比如:spooling directory source 為檔案的每一行建立一個事件,一旦事務中所有的事件全部傳遞到channel且提交成功,那麼source就將該檔案標記為完成。同理,事務以類似的方式處理從channel到sink的傳遞過程,如果因為某種 原因使得事件無法記錄,那麼事務將會回滾。且所有的事件都會保持到channel中,等待重新傳遞。
二:Flume的At-least-once提交方式
Flume的事務機制,總的來說,保證了source產生的每個事件都會傳送到sink中。但是值得一說的是,實際上Flume作為高容量並行採集系統採用的是At-least-once(傳統的企業系統採用的是exactly-once機制)提交方式,這樣就造成每個source產生的事件至少到達sink一次,換句話說就是同一事件有可能重複到達。這樣雖然看上去是一個缺陷,但是相比為了保證Flume能夠可靠地將事件從source,channel傳遞到sink,這也是一個可以接受的權衡。如上部落格中spooldir的使用,Flume會對已經處理完的資料進行標記。
三:Flume的批處理機制
為了提高效率,Flume儘可能的以事務為單位來處理事件,而不是逐一基於事件進行處理。比如spooling directory source以100行文字作為一個批次來讀取(BatchSize屬性來配置,類似資料庫的批處理模式)。批處理的設定尤其有利於提高file channle的效率,這樣整個事務只需要寫入一次本地磁碟,或者呼叫一次fsync,速度回快很多
四:多層代理
如果是第一層某個代理失敗,那麼可以考慮由第一層的其他節點來接管故障節點。如果是第二層代理停止執行,則為了防止資料丟失,只能讓每一個第一層代理具有多個冗餘的Avro sink,然後把這些sink安排到同一個sink組中,如果第二層代理中的某個代理出現問題,則該事件會被傳遞給該層sink組的其他代理來完成,以此來實現故障轉移和負載均衡