您好,登錄后才能下訂單哦!
對Flume NG不了解的朋友可以閱讀一下這篇文章Flume NG入門詳解 。開源的日志采集方案很多:
Scribe : 是Facebook開發的數據收集系統,項目不怎么維護。
Logstash: 是著名的開源數據棧ELK中的那個L。Logstash使用JRuby開發,運行時依賴JVM。 有比較強大的字段解析和過濾功能,但需要配置grok表達式,對實現數據傳輸有一定局限性,覺得不方便二次開發。
Flume NG: 是Cloudera主導開發,是新一代的數據采集傳輸工具,構架簡單,使用靈活,是hadoop生態中的一部分,核心代碼量不大,方便二次開發。
選擇什么方案主要根據團隊積累和習慣,能解決數據采集問題就好。本文主要講解使用Flume NG搭建數據采集平臺。
數據采集是大數據平臺的重要一環,一邊需要對接各種數據源,另一邊要考慮離線數據對接和實時流式計算需求。總結一下主要需求點:
支持文件日志數據采集,保證文件記錄不丟失
考慮應用升級成本,低成本實現日志數據對接
考慮流式計算需求,建立高速數據通路
能夠有一定的擴展性,應對數據量的增長
具有一定容災考慮,保證數據完整性
能夠監控數據的采集,傳輸過程
使用 Flume NG + Kafka,基本能夠實現上述平臺需求:
Flume 已經實現了各種source,基本能夠保證靈活實現各種數據源的對接
Flume 可配置成將數據復制成兩個數據流,一條直接寫入HDFS,一條寫入Kafka
通過Kafka對接流式計算和其它數據消費者,從而完成數據源和消費者的解耦
Flume支持loadbalance和failover,能夠實現水平擴展,保證數據傳輸完整性
Flume 支持http方式獲取內部監控指標數據
我們看看使用Flume NG構建數據采集平臺的整體架構:
整個方案通過avro rpc做數據的匯集。為什么中間多了 data collection 這層?增加這層起到數據匯集的作用,datasource節點會很多,如果這些點都直接對接持久化層,那配置是比較多的,而且需要做調整時,涉及的機器和權限太多。多加一層可以使前后耦合降低,中間層機器數量不多,對數據寫入,文件數量都有一定優化作用。而且需要增加新的數據持久只需修改幾個節點配置。
實際使用中有幾個點需要注意和優化:
channel的選擇,考慮性能和穩定性,可以考慮使用SpillableMemoryChannel,兼顧memory channel和file channel的實現,代碼量不大,可以驗證使用。如果你保守一點就是用file channel。
file channel使用磁盤分區最好和應用數據輸出分區分開,file channel,進度和數據目錄也盡量分開。
配置loadbalance和failover時候,sink不能復用。
如果有能力盡量重新定制hdfs 寫入過程,使用約定來減少通用代碼邏輯。現有的hdfs sink,考慮到通用性使用了正則等,沒有考慮你的數據特點,有一定優化的空間。
增加各個環節 channel,source,sink 的監控,了解整體數據流向和壓力,適時考慮擴容等問題。
最好自己能夠開發flume ng source 和sink,這樣可以根據自己業務數據的特點,做適當的優化。
Flume NG 是一個很好的數據收集和傳輸工具,適合二次開發。后面一些實踐配置繼續給出。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。