SparkStreaming數(shù)據(jù)源Flume實(shí)際案例分享1、Flume簡(jiǎn)要介紹 2、Spark Streaming on Flume案例介紹 
一、什么是Flume? flume 作為 cloudera 開(kāi)發(fā)的實(shí)時(shí)日志收集系統(tǒng),受到了業(yè)界的認(rèn)可與廣泛應(yīng)用。Flume 初始的發(fā)行版本目前被統(tǒng)稱(chēng)為 Flume OG(original generation),屬于 cloudera。但隨著 FLume 功能的擴(kuò)展,F(xiàn)lume OG 代碼工程臃腫、核心組件設(shè)計(jì)不合理、核心配置不標(biāo)準(zhǔn)等缺點(diǎn)暴露出來(lái),尤其是在 Flume OG 的最后一個(gè)發(fā)行版本 0.94.0 中,日志傳輸不穩(wěn)定的現(xiàn)象尤為嚴(yán)重,為了解決這些問(wèn)題,2011 年 10 月 22 號(hào),cloudera 完成了 Flume-728,對(duì) Flume 進(jìn)行了里程碑式的改動(dòng):重構(gòu)核心組件、核心配置以及代碼架構(gòu),重構(gòu)后的版本統(tǒng)稱(chēng)為 Flume NG(next generation);改動(dòng)的另一原因是將 Flume 納入 apache 旗下,cloudera Flume 改名為 Apache Flume。 flume的特點(diǎn): flume是一個(gè)分布式、可靠、和高可用的海量日志采集、聚合和傳輸?shù)南到y(tǒng)。支持在日志系統(tǒng)中定制各類(lèi)數(shù)據(jù)發(fā)送方,用于收集數(shù)據(jù);同時(shí),F(xiàn)lume提供對(duì)數(shù)據(jù)進(jìn)行簡(jiǎn)單處理,并寫(xiě)到各種數(shù)據(jù)接受方(比如文本、HDFS、Hbase等)的能力 。 flume的數(shù)據(jù)流由事件(Event)貫穿始終。事件是Flume的基本數(shù)據(jù)單位,它攜帶日志數(shù)據(jù)(字節(jié)數(shù)組形式)并且攜帶有頭信息,這些Event由Agent外部的Source生成,當(dāng)Source捕獲事件后會(huì)進(jìn)行特定的格式化,然后Source會(huì)把事件推入(單個(gè)或多個(gè))Channel中。你可以把Channel看作是一個(gè)緩沖區(qū),它將保存事件直到Sink處理完該事件。Sink負(fù)責(zé)持久化日志或者把事件推向另一個(gè)Source。 flume的可靠性 當(dāng)節(jié)點(diǎn)出現(xiàn)故障時(shí),日志能夠被傳送到其他節(jié)點(diǎn)上而不會(huì)丟失。Flume提供了三種級(jí)別的可靠性保障,從強(qiáng)到弱依次分別為:end-to-end(收到數(shù)據(jù)agent首先將event寫(xiě)到磁盤(pán)上,當(dāng)數(shù)據(jù)傳送成功后,再刪除;如果數(shù)據(jù)發(fā)送失敗,可以重新發(fā)送。),Store on failure(這也是scribe采用的策略,當(dāng)數(shù)據(jù)接收方crash時(shí),將數(shù)據(jù)寫(xiě)到本地,待恢復(fù)后,繼續(xù)發(fā)送),Besteffort(數(shù)據(jù)發(fā)送到接收方后,不會(huì)進(jìn)行確認(rèn))。 flume的可恢復(fù)性: 還是靠Channel。推薦使用FileChannel,事件持久化在本地文件系統(tǒng)里(性能較差)。 flume的一些核心概念: Agent 使用JVM 運(yùn)行Flume。每臺(tái)機(jī)器運(yùn)行一個(gè)agent,但是可以在一個(gè)agent中包含多個(gè)sources和sinks。 Client 生產(chǎn)數(shù)據(jù),運(yùn)行在一個(gè)獨(dú)立的線(xiàn)程。 Source 從Client收集數(shù)據(jù),傳遞給Channel。 Sink 從Channel收集數(shù)據(jù),運(yùn)行在一個(gè)獨(dú)立線(xiàn)程。 Channel 連接 sources 和 sinks ,這個(gè)有點(diǎn)像一個(gè)隊(duì)列。 Events 可以是日志記錄、 avro 對(duì)象等。
|