kafka適用哪些離線同步場景

一、源端爲大量小文件,合併爲一個大文件存儲到hdfs

      a)爲什麼要把小文件合併爲大文件

大量的小文件同步到hdfs,對namenode的壓力非常大,生成環境是不會允許如此使用集羣的。

       b)爲什麼選kafka

producer可以將文件內容轉成消息發送到topic,相當於在數據傳輸過程對小文件進行了合併

       c)consumer將消息直接寫到hdfs還是保存在本地,那個方式比較好?

實際上兩種方式都可以,直接寫到本地,速度最快,但是還需要將本地數據put到hdfs,操作起來簡單,但比較繁瑣,但相對來說效率最好;直接寫到hdfs,由於consumer直接調用hdfs客戶端,如果單行寫效率很低,如果批量寫效率有提升,但相對put命令還是要慢很多,而且複雜度一下就上來了,kafka出現異常、consumer寫hdfs失敗時該如何處理offset,這個問題很複雜。

 

Kafka同步效率優化:

kafka有consumer group的概念,消費者以組爲單位消費topic裏的消息,但是一個partition中的消息同時只能被consumer group裏的一個consumer處理,最優設置爲一個topic有多少個partition,對應的consumer group就配置多少個consumer,如果partition不變,且consumer個數大於等於partition數量的前提下,再增加consumer group的consumer個數,不會增加消費效率。

 

PS:

kafka作爲一款消息分發框架,簡單點說就是將源端數據按行分裝成一個個單獨的消息,一個一個的處理,效率肯定是不如輸入輸出流的,所有kafka適合處理實時、小批量或者小文件的離線場景,不適用於大文件的同步場景。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章