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

相关文章
相关标签/搜索