FLume相關面試題

业余砖家發表於2024-12-04

1.為什麼要有Flume?

客戶端伺服器,與叢集伺服器是分開的,而日誌檔案業務資料都是在客戶端伺服器產生的,所以需要在客戶端伺服器安裝一個工具,將資料傳送到叢集伺服器或者其他地方,這個工具就是Flume

2.Flume架構

source :專門用於收集資料的,可以處理各種型別、格式的資料。

channel:負責聚合資料,對採集到的資料進行快取的,這是防止資料採集和傳送速度不均衡完成擁堵。

sink:專門用於傳送資料的,可以傳送到不同的目的地,去hdfskafkahbase

eventFlume資料傳輸的基本單元,對資料進行序列化,包含header(頭資訊)body(資料本身)

攔截器:可以在攔截器內實時處理資料,對於資料非常有用

由於source收集和sink傳送速度不均衡,容易造成擁堵,所以需要一箇中轉站暫時存放資料,就是channel

File Channel:資料儲存於磁碟,安全可靠。

Memory Channel:資料儲存於記憶體,速度快。

Kafka Channel:資料儲存於 Kafka,傳輸速度最快,省去sink階段,如果果下一級是 Kafka,優先選擇。

資料可能有各種來源,收集的方式不同,這是source 的主要工作,可以設定不同的收集方式:

採集某個檔案的資料

指定接收某個埠的資料

採集檔案的增加資料

資料可能要傳送給不同的物件,傳送的方式不同,這是sink的主要工作,可以設定不同的傳送方式:

列印到控制檯

指定伺服器:埠進行傳送

傳送到hdfs叢集

傳送到kafka

3.Flume 有哪些元件,Flume sourcechannelsink 具體是做什麼的?

(1).source:用於採集資料,Source 是產生資料流的地方,同時 Source 會將產生的資料流傳輸到 Channel,這個有點類似於 Java IO 部分的 Channel

(2).channel:用於橋接 Sources Sinks,類似於一個佇列。

(3).sink:從 Channel 收集資料,將資料寫到目標源(可以是下一個 Source,也可以是 HDFS或者 HBase)

4.如何實現Flume資料傳輸的實時監控

使用第三方框架Ganglia實時監控Flume

1)採用Ganglia監控器,監控到Flume嘗試提交的次數遠遠大於最終成功的次數,說明Flume執行比較差。主要是記憶體不夠導致的。

2)解決辦法?

1)自身:Flume預設記憶體2000m。考慮增加Flume記憶體,在flume-env.sh配置檔案中修改Flume記憶體為4-6g

-Xmx-Xms最好設定一致,減少記憶體抖動帶來的效能影響,如果設定不一致容易導致頻繁fullgc。

2)找朋友:增加伺服器臺數

搞活動 618 > 增加伺服器 > 用完在退出

日誌伺服器配置:8-16g記憶體、磁碟8T

5.Channel selectors是什麼

events或者說資料要可以透過不同的channel 傳送到不同的sink中去,那麼events要傳送到哪個channel 就是由於channel selectors決定的。

channel selectors包括了

Replicating channel selectors 複製選擇器

Multiplexing channel selectors 多路選擇器

預設的是複製選擇器,即每個channel的資料都是一樣的,多路選擇權就需要按照制定的規則去判斷了。

6.Flume引數調優思路

首先就是啟動多個Flume

source :如果採集速度比較慢,可以考慮

啟動多個source 進行採集;

調整batchSize,決定了source 一次批次運輸eventschannel 的條數,適當調大可以提高source 搬運eventschannel 的效能

channel

快取方式(type)選擇記憶體(memory)時,channel效能最好,但是會有丟失資料的風險;選擇磁碟(file)時,可靠性更好,但是效能差一點,可以選擇多個不同盤下的目錄來提高效能;

引數Capacity決定了channel 可容納最大的events條數;引數transactionCapacity決定了每次sourcechannel/sinkchannel讀的最大enents條數。注意:transactionCapacity要大於sourcesinkbatchsize

sink:增加sink的個數;引數batchsize決定了sink一次批次從channel 讀取的events條數

7.Flume的事務機制

Flume使用兩個獨立事務puttake,分別負責從source channel channel sink,記錄事件狀態,保證兩個過程的資料不會丟失

8.Flume的資料會丟失嗎?

根據Flume的事務機制,Flume的資料一般不會丟失,除非使用的時候memory channel ,在機器當機的時候會導致資料丟失,或者channel 滿了,sources無法寫入導致資料丟失

此外,也有可能完成資料重複,比如sink接收到一批資料,處理到一半當機了,處理完的資料沒有給channel 傳送響應,導致channel 重新傳送資料,造成資料重複。

9.零點漂移問題,在Flume中如何解決?

零點漂移問題:舉個例子,我有一些日誌檔案,需要透過Flume按照日期存放到hdfs中,那麼就需要用到日期了,而HdfsSink是預設繼續eventheard生成的時間戳進行分割槽存放的,這個時間是生成event的時間,而不是資料的生成時間,所以存在一個時間差。如果剛好這個時間跨過了一天,那麼就會導致日期增加了一天,這個就是零點漂移。

解決:在source元件內增加攔截器,從eventbody中拿出資料生成時間,替換掉header的時間

10.Flume組成,Put事物,Task事務?

答:Flume組成,Put事物,Task事務

a. Taildir Source:斷點續傳、多目錄

b. File Channel:資料儲存在磁碟中,當機資料可以儲存。傳輸速率慢,適合對資料傳輸可靠性要求高的場景,例如:金融行業

c. Memory Channel:資料儲存在記憶體中,當機資料容易丟失。傳輸效率快,適合對資料傳輸可靠性要求不高的場景,例如:日誌資料

d. Kafka Channel:減少FlumeSink階段,提高了傳輸效率

SourceChannelPut事務

ChannelSinkTask事務

11.Flume Event

Event是資料流的基本單元,由一個裝載資料的位元組陣列(byte payload)和一系列可選的字串屬性來組成(可選頭部)

12.Flume的事務機制

答:Flume的事務機制(類似資料庫的事務機制):Flume使用兩個獨立的事務分別負責從SoucrceChannel,以及從ChannelSink的事件傳遞。比如spooling directory source 為檔案的每一行建立一個事件,一旦事務中所有的事件全部傳遞到Channel且提交成功,那麼Soucrce就將該檔案標記為完成。同理,事務以類似的方式處理從ChannelSink的傳遞過程,如果因為某種原因使得事件無法記錄,那麼事務將會回滾。且所有的事件都會保持到Channel中,等待重新傳遞。

13.Flume Kafka 採集日誌區別,採集日誌時中間停了,怎麼記錄之前的日誌?

答:(1)Flume 採集日誌是透過流的方式直接將日誌收集到儲存層,而 kafka 是將快取在 kafka叢集,待後期可以採集到儲存層。

(2)Flume 採集中間停了,可以採用檔案的方式記錄之前的日誌,而 kafka 是採用 offset 的方式記錄之前的日誌。

14.資料怎麼採集到 Kafka,實現方式?

答:使用官方提供的 flumeKafka 外掛,外掛的實現方式是自定義了 flume 的 sink,將資料從channle 中取出,透過 kafka 的producer 寫入到 kafka 中,可以自定義分割槽等。

15.Flume攔截器

1)攔截器注意事項

1ETL攔截器:主要是用來判斷json是否完整。沒有做複雜的清洗操作主要是防止過多的降低傳輸速率。

2)時間戳攔截器:主要是解決零點漂移問題

2)自定義攔截器步驟

1)實現 Interceptor

2)重寫四個方法

  • initialize 初始化
  • public Event intercept(Event event) 處理單個Event
  • public List<Event> intercept(List<Event> events) 處理多個Event,在這個方法中呼叫Event intercept(Event event)
  • close方法

3)靜態內部類,實現Interceptor.Builder

3)攔截器可以不用嗎?

ETL攔截器可以不用;需要在下一級Hivedwd層和SparkSteaming裡面處理

時間戳攔截器建議使用。 如果不用需要採用延遲15-20分鐘處理資料的方式,比較麻煩。

相關文章