本文就從如下的幾個方面講述下我的使用心得:
初體驗——與Logstash的對比
安裝部署
啟動教程
參數與實例分析
Flume初體驗
Flume的配置是真繁瑣,source,channel,sink的關系在配置文件里面交織在一起,沒有Logstash那么簡單明了。
Flume與Logstash相比,我個人的體會如下:
Logstash比較偏重于字段的預處理;而Flume偏重數據的傳輸;
Logstash有幾十個插件,配置靈活;FLume則是強調用戶的自定義開發(source和sink的種類也有一二十個吧,channel就比較少了)。
Logstash的input和filter還有output之間都存在buffer,進行緩沖;Flume直接使用channel做持久化(可以理解為沒有filter)
Logstash淺談:
Logstash中:
input負責數據的輸入(產生或者說是搜集,以及解碼decode);
Filter負責對采集的日志進行分析,提取字段(一般都是提取關鍵的字段,存儲到elasticsearch中進行檢索分析);
output負責把數據輸出到指定的存儲位置(如果是采集agent,則一般是發送到消息隊列中,如kafka,redis,mq;如果是分析匯總端,則一般是發送到elasticsearch中)
在Logstash比較看重input,filter,output之間的協同工作,因此多個輸入會把數據匯總到input和filter之間的buffer中。filter則會從buffer中讀取數據,進行過濾解析,然后存儲在filter于output之間的Buffer中。當buffer滿足一定的條件時,會觸發output的刷新。
Flume淺談:
在Flume中:
source 負責與Input同樣的角色,負責數據的產生或搜集(一般是對接一些RPC的程序或者是其他的flume節點的sink)
channel 負責數據的存儲持久化(一般都是memory或者file兩種)
sink 負責數據的轉發(用于轉發給下一個flume的source或者最終的存儲點——如HDFS)
Flume比較看重數據的傳輸,因此幾乎沒有數據的解析預處理。僅僅是數據的產生,封裝成event然后傳輸。傳輸的時候flume比logstash多考慮了一些可靠性。因為數據會持久化在channel中(一般有兩種可以選擇,memoryChannel就是存在內存中,另一個就是FileChannel存儲在文件種),數據只有存儲在下一個存儲位置(可能是最終的存儲位置,如HDFS;也可能是下一個Flume節點的channel),數據才會從當前的channel中刪除。這個過程是通過事務來控制的,這樣就保證了數據的可靠性。
不過flume的持久化也是有容量限制的,比如內存如果超過一定的量,也一樣會爆掉。
參考
1 Flume開發者指南
2 Flume使用指南