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