1. 程式人生 > >Flume 經驗淺談

Flume 經驗淺談

1.Flume 的停止

    使用 kill 停止 Flume 程序。

    不可使用 kill -9,因為 Flume 內部註冊了很多鉤子函式執行善後工作,如果使用 kill -9 會導致鉤子函式不執行,使用 kill 時,Flume 內部程序會監控到使用者的操作,然後呼叫鉤子 函式,執行一些善後操作,正常退出。

2.Flume 資料丟失問題的討論

    在一些網路資料中提出當 Flume 的資料量達到 70MB/s 以上時,就會出現丟失資料的情況,但是根據 Flume 的架構原理,Flume 是不可能丟失資料的,其內部有完善的事務機制, Source 到 Channel 是事務性的,Channel 到 Sink 是事務性的,因此這兩個環節不會出現資料 的丟失,唯一可能丟失資料的情況是 Channel 採用 memoryChannel,agent 宕機導致資料丟 失,或者 Channel 儲存資料已滿,導致 Source 不再寫入,未寫入的資料丟失。並且,在實 際的專案開發和執行過程中,並沒有出現過 Flume 丟失資料的情況(以滴滴為例),因此, Flume 在資料量大的時候丟失資料的論斷還有待商榷。

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

3.在Flume中sink如何從channel中讀取資料:

    預設情況下,Sink獲取資料的方式是:當source向channer傳送一條資料的時候,sink會通過迴圈的方式獲取一條資料,然後在傳送給客戶端。

    sink可以分為KafkaSink 和AvroSink。

    KafkaSink 和 AvroSink 都是通過迴圈的方式獲取資料的,但 KafkaSink 可以通過配置topic配置進行批量從客戶端讀取。但原理還是一條一條的從channer讀取資料,只是在sink中存在快取機制,當資料量達到某一數量的時候,會進行將資料傳送到客戶端。