flume是一个日志采集工具,这里需要注意,必须是日志哦。
当然了数据采集工具还有很多了,不过Flume应该是最火的,这里这里只讲这个。
flume有三个主要的组件,分别是source,channel和sink
source:接受日志数据的组件,可以处理各种类型各种格式的日志数据。当然也只能是日志数据,主要有avro、exec、netcat之类的。
channel:这个呢就是source和sink间的缓冲区,sink比较脆弱啦,一股脑涌进去人家也承受不了,就得缓冲一下啦。这样就允许source和sink运行在不同的速率上。
明面上channel好像就这点作用,但是,你可不要被她的外表欺骗了。channel起到的作用远不止于此。这里的缓冲带来的另一个优势就是线程上面,source和sink可以在不用速率上运行,那么这就意味着可以同时处理多个source和sink,保持线程的安全。常见的channel有memory channel、file channel和kafka channel。
memory和file的区别其实也很明显,memory是内存,file是文件,缓存到内存memory中,当然毫无疑问的快啦,但容量有限,而且万一出故障了,就没了。存文件file相对慢一些,但是容量大,相对安全。就当扯平了。
sink:他就不断从channel中取数据了,发送到目的地,可以是hdfs,hive,HBASE。
sink也有很多,值得一提的就是logger sink,这个主要用于测试,假如你的sink坏掉了,可以考虑用这个替换,如果显示数据了,那就是sink坏了,如果还不显示数据,那就是前面错了。
还有一个点也说一下吧,就是event,这个是flume数据传输的最小单位,具体多大也没说。
这里大概说一下吧,就是看flume的sink,前面说了sink发送的目的地很多,那么,如果sink的目的地是下一个source怎么办呢?这就是一个agent的串联。感觉没啥用,所以这种出现的也很少,多个串联反而会影响效率。
另一种就是复制模式,就是一个source连了多个channel,每个channel对应一个sink,发往不同的目的地。
聚合模式
最常用的其实是聚合模式,当然也非常有效,日常的web应用会连在上百个服务器中,大的甚至是上千上万个服务器。这种日志,想想就很恶心。用聚合模式来处理就可以很好的解决,每台服务器部署一个flume采集日志,传送到一个集中收集日志的flume,再由这个flume传到目标地区中。
后面的这个实例有些麻烦,明天再看吧