Flume-NG之KafkaChannel

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

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

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

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

  三、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。ip

  咱們知道,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那的部分還有一些不太明瞭,就很差意思在這深刻分析了。。。本身在後面再仔細看吧 源碼

  kafka大夥本身學吧,這也是一個好東西。。。 

 

  參考:

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

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

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

相關文章
相關標籤/搜索