電話:15588929232
關閉
您當前的位置:首頁 > 職場資訊 > 職場資訊

面試官系列:談談你對Flume的理解

來源:萊蕪匯聚英才招聘網 時間:2021-08-13 作者:萊蕪匯聚英才招聘網 瀏覽量:


大家好,我是一哥,今天給大家分享一下Flume的面試點,按照這個回答,面試官會吐血,哈哈!
01Flume起源

Flume最早是Cloudera開發的實時日志收集系統,最早的時候Flume的版本稱為Flume OG(original generation),隨著功能的擴展和代碼的重構,隨之出現了我們熟知的Flume NG(next generation),后來也捐給了Apache基金會成為了Apache的頂級項目。Apache Flume 是一個分布式、高可靠(事務)、高可用(failover)的用來收集、聚合、轉移不同來源的大量日志數據到中央數據倉庫的工具。


02Flume架構

Event:Flume定義的一個數據流傳輸的最小單元,數據被封裝到Event中往后傳輸。Event由Header和Byte Payload組成:

Header:一系列可選的string屬性(鍵值對Map)Byte Payload:裝載數據的字節數組(網絡傳輸都是傳輸字節)

Agent:Flume最小的獨立運行單位,一個Agent就是一個Flume的實例,本質是一個JVM進程,該JVM進程控制Event數據流從外部日志生產者那里傳輸到目的地(或者是下一個Agent)。同時,一個Agent就對應一個配置文件。

Source:對接輸入源,監控外部數據源的數據,傳輸給Channel。

Source類型:

支持Avro(RPC)協議監控指定目錄內數據變更(上傳文件)監控某個端口,將流經端口的每一個文本行數據作為Event輸入監控消息隊列數據Channel:簡單理解,就是緩存數據。

Channel類型:

Memory Channel:內存中隊列,適用于不需要關心數據丟失的情景File Channel:將所有Event寫到磁盤,在程序關閉或機器宕機的情況下不會丟失數據Kafka channel :直接使用消息隊列作為數據緩存Sink:我們采集數據的目的地,Sink不斷地輪詢Channel中的Event且批量地移除它們,并將這些Event批量寫入到存儲系統或者發送到另一個Agent。

Sink類型:

HDFS:數據寫入到HDFSAvro:數據被轉換成Avro event,然后發送到配置的RPC端口上(Avro Source)File Roll:存儲數據到本地文件系統HBase:數據寫入HBase數據庫Logger:數據寫入到日志文件(往往是寫到控制臺)

03Flume事務流程

Channel使用被動存儲機制,依靠Source完成數據寫入(推送)、依靠Sink完成數據讀?。ɡ。?。

Channel是Event隊列,先進先出:Source -> EventN,...,Event2,Event1 -> SinkSink是完全事務性的。在從Channel批量刪除數據之前,每個Sink用Channel啟動一個事務。批量Event一旦成功寫出到存儲系統或下一個Agent,Sink就利用Channel提交事務。事務一旦被提交,該Channel從自己的內部緩沖區刪除Event

Flume 推送事務流程

doPut:將批數據先寫入臨時緩沖區putList,不是來一條Event就處理,是來一批Event才處理doCommit:檢查Channel內存隊列空間是否充足,充足則直接寫入Channel內存隊列,不足則doRollback回滾數據到putList,等待重新傳遞,回滾數據指的是putList的Event索引回退到之前

Flume拉取事務流程

doTake:先將數據取到臨時緩沖區takeListdoCommit:如果數據全部發送成功,則清除臨時緩沖區takeListdoRollback:數據發送過程中如果出現異常,將臨時緩沖區takeList中的數據doRollback歸還給Channel內存隊列,等待重新傳遞


04Flume參數調優

Source

1、增加Source個數,可以增大Source讀取數據的能力。例如:當某一個目錄產生的文件過多時需要將這個文件目錄拆分成多個文件目錄,同時配置好多個 Source以保證Source有足夠的能力獲取到新產生的數據。

2、適當調大batchSize,可以提高Source搬運Event到Channel時的性能。

Channel

1、type選擇memory時Channel的性能最好,但是如果Flume進程意外掛掉可能會丟失數據。

2、type選擇file時Channel的容錯性更好,但是性能上會比memory Channel差。使用file Channel時 dataDirs配置多個不同盤下的目錄(注意不是同一個盤不同目錄哦)可以提高性能。3、capacity參數決定Channel可容納最大的Event條數。

Sink

1、增加Sink的個數可以增加Sink消費Event的能力。Sink也不是越多越好夠用就行,過多的Sink會占用系統資源,造成系統資源不必要的浪費。

2、適當調大batchSize,可以提高Sink從Channel搬出Event的性能。


05Flume的一個bug插曲

有一次我使用file作為channel重啟時候碰見一個錯誤,長這樣:

ERROR org.apache.flume.SinkRunner: Unable to deliver event. Exception follows.java.lang.IllegalStateException: Channel closed [channel=fileChannel]. Due to java.io.EOFException: null at org.apache.flume.channel.file.FileChannel.createTransaction(FileChannel.java:340) at org.apache.flume.channel.BasicChannelSemantics.getTransaction(BasicChannelSemantics.java:122) at org.apache.flume.sink.hdfs.HDFSEventSink.process(HDFSEventSink.java:368) at org.apache.flume.sink.DefaultSinkProcessor.process(DefaultSinkProcessor.java:68) at org.apache.flume.SinkRunner$PollingRunner.run(SinkRunner.java:147) at java.lang.Thread.run(Thread.java:745)Caused by: java.io.EOFException at java.io.RandomAccessFile.readInt(RandomAccessFile.java:827) at java.io.RandomAccessFile.readLong(RandomAccessFile.java:860) at org.apache.flume.channel.file.EventQueueBackingStoreFactory.get(EventQueueBackingStoreFactory.java:80) at org.apache.flume.channel.file.Log.replay(Log.java:426) at org.apache.flume.channel.file.FileChannel.start(FileChannel.java:290) at org.apache.flume.lifecycle.LifecycleSupervisor$MonitorRunnable.run(LifecycleSupervisor.java:251) at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471) at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:304) at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$301(ScheduledThreadPoolExecutor.java:178) at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:293) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) ... 1 mor


微信掃一掃分享資訊
客服服務熱線
15588929232
關于我們
產品與服務
收費與推廣
網站特色
咨詢反饋
微信公眾號
手機瀏覽

Copyright C 20092014 All Rights Reserved 版權所有 山東匯聚英才人力資本管理有限公司 魯ICP備2021039384號-1

地址: EMAIL:admin@admin.com

Powered by PHPYun.

用微信掃一掃

两性色午夜视频在线播放