Flume的架構基本agent-->collect-->storage的架構,agent主要負責日誌的產生,並把日誌傳給collector端,collect負責把agent發送的日誌收集起來,發送給storage儲存,storage負責的儲存;其中agent和collect本身都是source,sink架構,所謂source、sink,類似產生者和消費者的架構,他們之間通過queue傳輸,解耦。 實際環境中有這樣的需求,通過在多個agent端tail日誌,發送給collector,collector再把資料收集,統一發送給HDFS儲存起來,當HDFS檔案大小超過一定的大小或者超過在規定的時間間隔會產生一個檔案。 Flume 實現了兩個Trigger,分別為SizeTriger(在調用HDFS輸出資料流寫的同時,count該流已經寫入的大小總和,若超過一定大小,則建立新的檔案和輸出資料流,寫入操作指向新的輸出資料流,同時close以前的輸出資料流)和TimeTriger(開啟定時器,當到達該點時,自動建立新的檔案和輸出資料流,新的寫入重新導向到該流中,同時close以前的輸出資料流)。 目前在Flume的配置中只支援TimeTrigger,
collectorSink( "fsdir","fsfileprefix",rollmillis),但是在代碼中已經實現了按照檔案大小進行復原,同時也實現了OrTrigger實現多個trigger的混合機制。對collectot定義如下格式
collectorSink( "fsdir","fsfileprefix",rollmillis,maxsize),其中maxsize是HDFS檔案的最大大小(M)如 exec config collector 'collectorSource(35862)' 'collectorSink("hdfs://hostname:9100/syslog","log",300000,200)' CollectorSink修改 public static SinkBuilder hdfsBuilder(),支援對maxsize檔案大小參數的校正。
增加建構函式,在建構函式中,建立OrTrigger並傳入RollSink支援對檔案大小和時間間隔Trigger的支援。
CollectorSink(Context ctx, final String snkSpec, final long millis,final long size, final Tagger tagger, long checkmillis,AckListener ackDest)