這篇文章主要講解了“Apache Flume是什么”,文中的講解內(nèi)容簡(jiǎn)單清晰,易于學(xué)習(xí)與理解,下面請(qǐng)大家跟著小編的思路慢慢深入,一起來(lái)研究和學(xué)習(xí)“Apache Flume是什么”吧!
超過(guò)十年行業(yè)經(jīng)驗(yàn),技術(shù)領(lǐng)先,服務(wù)至上的經(jīng)營(yíng)模式,全靠網(wǎng)絡(luò)和口碑獲得客戶,為自己降低成本,也就是為客戶降低成本。到目前業(yè)務(wù)范圍包括了:網(wǎng)站設(shè)計(jì)、成都網(wǎng)站制作,成都網(wǎng)站推廣,成都網(wǎng)站優(yōu)化,整體網(wǎng)絡(luò)托管,微信小程序定制開發(fā),微信開發(fā),App定制開發(fā),同時(shí)也可以讓客戶的網(wǎng)站和網(wǎng)絡(luò)營(yíng)銷和我們一樣獲得訂單和生意!
Flume是為高效收集聚合大量日志數(shù)據(jù)設(shè)計(jì)的可靠的、可用的分布式系統(tǒng)。它有一個(gè)基于流式數(shù)據(jù)流的簡(jiǎn)單靈活的體系。它提供了可控的可靠機(jī)制和許多故障轉(zhuǎn)移與恢復(fù)機(jī)制。它使用了一個(gè)用于在線分析應(yīng)用的簡(jiǎn)單可擴(kuò)展的數(shù)據(jù)模型。
FileChannel是一個(gè)持久化的Flume channel,支持并行的寫到多個(gè)磁盤并且支持加密。
概念
當(dāng)使用Flume時(shí),每個(gè)流程都有一個(gè)Source、Channel、Sink。一個(gè)典型的例子是一個(gè)webserver通過(guò)RPC(比如:AvroSource)將events寫到一個(gè)Source、然后Source將events寫到MemoryChannel,最后HDFSSink消費(fèi)event,將它寫到HDFS。
MemoryChannel能提供很高的吞吐量,但是當(dāng)系統(tǒng)斷電或程序崩潰時(shí)會(huì)丟失數(shù)據(jù)。因此人們急需一個(gè)能持久化的Channel。FileChannel在FLUME-1085被實(shí)現(xiàn)。它的目標(biāo)是提供一個(gè)可靠的高吞吐量的Channel。FileChannel保證當(dāng)斷電或崩潰發(fā)生時(shí),事務(wù)被提交,沒有數(shù)據(jù)丟失。
重要的一點(diǎn)是FileChannel不做任何數(shù)據(jù)的復(fù)制,僅依賴于底層磁盤的可靠性,因此,由于持久性需要使用FileChannel的用戶在購(gòu)買和配置硬件時(shí)注意這一點(diǎn)。底層的磁盤將要做RAID、SAN或類似的東西。
許多系統(tǒng)為了高的吞吐率需要拿允許小量數(shù)據(jù)丟失做交換。Flume組決定FileChannel采用不同的方式。Flume是一個(gè)支持事務(wù)的系統(tǒng),多個(gè)event可以在單個(gè)事務(wù)中被put或take。batch size用來(lái)控制吞吐率。使用大的batch size,flume可以以高吞吐率移動(dòng)數(shù)據(jù),并且不丟失數(shù)據(jù)。batch size完全可以通過(guò)client控制。這個(gè)方法與DBMS
相似。
一個(gè)flume事務(wù)包含put或take,一個(gè)事務(wù)中不能同時(shí)有put和take操作。每個(gè)事務(wù)都要實(shí)現(xiàn)put和take方法。source通過(guò)put將event放入channel,sink通過(guò)take將event從channel拿走。
設(shè)計(jì)
FileChannel是基于內(nèi)存隊(duì)列和WAL設(shè)計(jì)的。每次事務(wù)都是根據(jù)事物類型(Take和Put)寫到WAL,隊(duì)列也做相應(yīng)的修改。每次事務(wù)被commited,都會(huì)調(diào)用fsync確保events被存儲(chǔ)在磁盤文件,同時(shí)指向該event的指針被放到隊(duì)列中。這里的隊(duì)列服務(wù)就像其他隊(duì)列一樣:它管理著什么被sink消費(fèi)。在Take期間,該event的指針從隊(duì)列被刪除。直接從WAL讀這個(gè)event。由于今天我們有大量可用的RAM,從操作系統(tǒng)的文件緩存中讀取也是經(jīng)常發(fā)生的。
崩潰后,通過(guò)重放WALs,隊(duì)列位置能恢復(fù)到崩潰前同樣的狀態(tài),而那些沒有commited的事務(wù)被丟棄。重放WALs相當(dāng)耗時(shí),因此隊(duì)列本身會(huì)周期性的寫到磁盤。將隊(duì)列寫到磁盤稱為checkpoint。這樣,崩潰后,隊(duì)列首先從磁盤checkpoint文件加載,然后僅僅重放那些隊(duì)列被最后一次checkpoint到磁盤后commited的事務(wù),這樣明顯的減少了讀取WAL的數(shù)量。
例如,一個(gè)channel有2個(gè)event,如下所示:
WALs包含3個(gè)重要的屬性:事務(wù)ID、序列號(hào)、event數(shù)據(jù)。每個(gè)事務(wù)都有唯一的事務(wù)Id,并且每個(gè)event都有唯一的序列號(hào)。事務(wù)Id被用來(lái)簡(jiǎn)單的將event分組到同一事務(wù),而序列號(hào)在重放log時(shí)使用。上圖中,事務(wù)ID為1,序列號(hào)為1,2,3.
當(dāng)隊(duì)列被checkpoint到磁盤,增加序列號(hào),同時(shí)序列號(hào)也被保存到磁盤。重啟時(shí),隊(duì)列首先從磁盤加載,然后比隊(duì)列序列號(hào)大的任何WAL實(shí)體被重放。checkpoin操作期間,隊(duì)列是locked,以至于沒有Put或Take操作可以更改它的狀態(tài)。如果checkpoint期間允許隊(duì)列的修改,將導(dǎo)致磁盤存儲(chǔ)的隊(duì)列快照與實(shí)際隊(duì)列不一致。
在上面例子中,事務(wù)1commited后,checkpoint發(fā)生,在隊(duì)列中的結(jié)果帶著events被保存到磁盤還有序列號(hào)4也被保存。
之后,在事務(wù)2中,從隊(duì)列take一個(gè)event:
如果這個(gè)時(shí)候崩潰了,重啟時(shí)隊(duì)列從checkpoint加載,注意,checkpoint發(fā)生在事務(wù)2前,2個(gè)event“a”和“b”都會(huì)被加載到隊(duì)列,之后任何比4大的已經(jīng)確認(rèn)的事務(wù)被重放,重放后,“a”event從隊(duì)列被刪除。
上面的設(shè)計(jì)2點(diǎn)沒有考慮到,Take或Put進(jìn)行中,同時(shí)發(fā)生checkpoint,會(huì)導(dǎo)致數(shù)據(jù)丟失。假定checkpoint發(fā)生在take“a”之后:
如果此時(shí)崩潰,在以上描述的設(shè)計(jì)下,event“b”被加載進(jìn)入隊(duì)列,之后重放比5大的任何WAL實(shí)體,事務(wù)2被rollback,但是這里的take “a”不會(huì)被重放。event “a”被丟失,Put也存在相似的情況。由于這個(gè)原因,當(dāng)隊(duì)列的checkpoint發(fā)生時(shí),仍然在處理中的事務(wù)也被寫出,以至于可以適當(dāng)?shù)奶幚磉@個(gè)問(wèn)題。
實(shí)現(xiàn)
FileChannel在Flume項(xiàng)目的flume-file-channel模塊,對(duì)應(yīng)包名為org.apache.flume.channel.file。上面描述的隊(duì)列對(duì)應(yīng) FlumeEventQueue類,WAL對(duì)應(yīng) Log類。隊(duì)列本身是一個(gè)環(huán)形數(shù)組,通過(guò)內(nèi)存映射文件支撐;而WAL對(duì)應(yīng)一組文件,可以使用 LogFile類和它的子類讀寫這些文件。
感謝各位的閱讀,以上就是“Apache Flume是什么”的內(nèi)容了,經(jīng)過(guò)本文的學(xué)習(xí)后,相信大家對(duì)Apache Flume是什么這一問(wèn)題有了更深刻的體會(huì),具體使用情況還需要大家實(shí)踐驗(yàn)證。這里是創(chuàng)新互聯(lián),小編將為大家推送更多相關(guān)知識(shí)點(diǎn)的文章,歡迎關(guān)注!
網(wǎng)頁(yè)名稱:ApacheFlume是什么
轉(zhuǎn)載來(lái)源:http://jinyejixie.com/article4/jjgdoe.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供App設(shè)計(jì)、用戶體驗(yàn)、網(wǎng)站維護(hù)、網(wǎng)站改版、網(wǎng)頁(yè)設(shè)計(jì)公司、營(yíng)銷型網(wǎng)站建設(shè)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)