Flume日誌採集系統與Logstash對比
本文就從如下的幾個方面講述下我的使用心得:
初體驗——與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的持久化也是有容量限制的,比如記憶體如果超過一定的量,也一樣會爆掉。
作者:Albert陳凱
連結:https://www.jianshu.com/p/9ff3360d99bb
來源:簡書
簡書著作權歸作者所有,任何形式的轉載都請聯絡作者獲得授權並註明出處。