開發與維運

【Flume】(四)Flume 企業真實面試經驗

文章目錄


一、你是如何實現 Flume 數據傳輸的監控的

二、Flume 的 Source,Sink,Channel 的作用?你們 Source 是什麼類型?

三、Flume 的 Channel Selectors

四、Flume 參數調優

五、Flume 的事務機制

六、Flume 採集數據會丟失嗎?

一、你是如何實現 Flume 數據傳輸的監控的


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

二、Flume 的 Source,Sink,Channel 的作用?你們 Source 是什麼類型?


1、作用

(1)Source 組件是專門用來收集數據的,可以處理各種類型、各種格式的日誌數據,包括 avro、thrift、exec、jms、spooling directory、netcat、sequence generator、syslog、http、legacy

(2)Channel 組件對採集到的數據進行緩存,可以存放在 Memory 或 File 中。

(3)Sink 組件是用於把數據發送到目的地的組件,目的地包括 HDFS、Logger、avro、thrift、ipc、file、Hbase、solr、自定義。

2、我公司採用的 Source 類型為

(1)監控後臺日誌:exec

(2)監控後臺產生日誌的端口:netcat Exec spooldir

三、Flume 的 Channel Selectors


20200216193725885.png

四、Flume 參數調優


1.Source

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

batchSize 參數決定 Source 一次批量運輸到 Channel 的 event 條數,適當調大這個參數可以提高 Source 搬運 Event 到 Channel 時的性能。

2.Channel

type 選擇 memory 時 Channel 的性能最好,但是如果 Flume 進程意外掛掉可能會丟失數據。type 選擇 file 時 Channel 的容錯性更好,但是性能上會比 memory channel 差。

使用 file Channel 時 dataDirs 配置多個不同盤下的目錄可以提高性能。

Capacity 參數決定 Channel 可容納最大的 event 條數。transactionCapacity 參數決定每次 Source 往 channel 裡面寫的最大 event 條數和每次 Sink 從 channel 裡面讀的最大 event條數。transactionCapacity 需要大於 Source 和 Sink 的 batchSize 參數。

3.Sink

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

batchSize 參數決定 Sink 一次批量從 Channel 讀取的 event 條數,適當調大這個參數可以提高 Sink 從 Channel 搬出 event 的性能。

五、Flume 的事務機制


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

六、Flume 採集數據會丟失嗎?


根據Flume的架構原理,Flume是不可能丟失數據的,其內部有完善的事務機制, Source到Channel是事務性的,Channel到Sink是事務性的,因此這兩個環節不會出現數據的丟失,唯一可能丟失數據的情況是Channel採用 memoryChannel,agent宕機導致數據丟失,或者Channel存儲數據已滿,導致 Source不再寫入,未寫入的數據丟失。

Flume不會丟失數據,但是有可能造成數據的重複,例如數據已經成功由 Sink發出,但是沒有接收到響應,Sink會再次發送數據,此時可能會導致數據的重複。

Leave a Reply

Your email address will not be published. Required fields are marked *