Flume-NG之KafkaChannel

轉載:http://www.cnblogs.com/lxf20061900/p/4307381.html

 apache下一個版本(1.6)將會帶來一個新的組件KafKaChannel,顧名思義就是使用kafka做channel,當然在CDH5.3版本已經存在這個channel。

  大夥知道,常用的channel主要有三個:

  1、memory channel:用內存做channel,優點是速度最快,容易配置;缺點是,可靠性最差,因爲一旦flume進程掛了內存中還未出來的數據也就沒了;

  2、file channel:用本地文件做channel,優點是可靠性最高,數據都存在磁盤文件中,進程掛了重啓後還會斷點續傳;缺點是速度最慢;

  3、SpillableMemoryChannel:總和memory channel和file channel,本質上是一個file channel,但是優先存儲在內存中,內存滿了之後再溢出到磁盤,優點是兼顧上面倆的優點;同樣缺點也兼顧了;

  本人瞭解的現有各家怎麼用Flume的也不是很多,大概齊一個合理的拓撲結構是兩層,第一層的source直接和原始數據源接觸,這一層的Flume節點要多,其中channel用file channel或者SpillableMemoryChannel,有高可靠性;第二層是彙總節點,這裏的sink可以直接輸出比如hdfs、HBase、本地磁盤文件等等,這一層的flume節點會比第一層少很多,channel建議用memory channel,因爲這一層節點少,要保證及時彙總傳輸出去,那有問題爲啥不用SpillableMemoryChannel呢?上面說了,它兼顧了兩個channel,而且一個重要的缺點是第二層節點流量比第一層大,一旦第二層的sink出現問題可能會導致溢出到本地磁盤,這樣sink性能大大降低但是進入的流量並不會減少,而且SpillableMemoryChannel中的數據也是有順序的,這樣有可能會導致出的速度一直趕不上入的速度,一個辦法是增加節點數量(增加多了爲啥還要第二層呢?)或者使用memory channel。第一層加上backoff,而且使用負載均衡給第二層發送數據。

  但是現在情況大大改觀了,kafkaChannel的出現使得上面的兩層可以合成一層,我粗略試用了一下,exec source + kafkachannel + file_roll sink,一個broker,一個topic,一個partition,速度在42MB/s左右,這樣的速度雖然比不過memory channel,但是已經遠遠超過file channel了,而且可靠性不輸file channel。

  我們知道,kafka source用consumer來從kafka  pull數據,kafka sink使用producer將數據發到kafka。而kafka channel包含producer和consumer,producer接受source發送過來的數據放到broker中,consumer從broker中pull數據給sink。目前只允許有一個topic,而且kafka自己的參數可以加上"kafka.*"添加到flume的配置文件。

 

  今天就是簡單說一下,跟大夥趕緊分享一下這個東西,同學們可以抓緊試一下哈。。。。

  源碼其實也不是很難,不過說實話,關於kafka那的部分還有一些不太明瞭,就不好意思在這深入分析了。。。自己在後面再仔細看吧 

  kafka大夥自己學吧,這也是一個好東西。。。 

 

  參考:

  1、http://ingest.tips/2014/11/16/flafka-apache-flume-meets-apache-kafka-for-event-processing/

  2、https://github.com/cloudera/flume-ng/tree/cdh5-1.5.0_5.3.2

  3、https://github.com/apache/flume/tree/flume-1.6

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