1、什么是Flume
Flume是Cloudera提供的一个高可用的,高可靠的,分布式的海量日志采集、聚合和传输的系统。2009年被捐赠了apache软件基金会,为hadoop相关组件之一。尤其近几年随着flume的不断被完善以及升级版本的逐一推出,特别是flume-ng,同时flume内部的各种组件不断丰富,用户在开发的过程中使用的便利性得到很大的改善,现已成为apache top项目之一。
Flume可以收集例如日志,事件等数据资源,并将这些数量庞大的数据从各项数据资源中集中起来存储的工具/服务。flume具有高可用,分布式,配置工具,其设计的原理是基于数据流(流式架构,灵活简单),如日志数据从各种网站服务器上汇集起来存储到HDFS,HBase等集中存储器中。其结构如下图所示:
Flume最主要的作用是实时读取服务器本地磁盘的数据,将数据写入HDFS或Kafka等。
2、Flume文件目录
文件夹 | 说明 |
---|---|
bin | 存放了启动脚本 |
lib | 启动所需的所有组件jar包 |
conf | 提供了几个测试配置文件 |
docs | 文档 |
3、Flume的Agent组件
Flume内部有一个或者多个Agent,然而对于每一个Agent来说,它就是一共独立的守护进程(JVM),它从客户端哪儿接收收集,或者从其他的 Agent哪儿接收,然后迅速的将获取的数据传给下一个目的节点sink,或者agent。
每个Agent包含了Source、Channel和Sink,具体介绍见下一题Flume架构。
4、Flume优缺点
优点
1)Flume可以将应用产生的数据存储到任何集中存储器中,比如HDFS,HBase。
2)当收集数据的速度超过将写入数据的时候,也就是当收集信息遇到峰值时,这时候收集的信息非常大,甚至超过了系统的写入数据能力,这时候,Flume会在数据生产者和数据收容器间做出调整,保证其能够在两者之间提供一共平稳的数据。
3)提供上下文路由特征。
4)Flume的管道是基于事务,保证了数据在传送和接收时的一致性。
5)Flume是可靠的,容错性高的,可升级的,易管理的,并且可定制的。
6)实时性,Flume有一个好处可以实时的将分析数据并将数据保存在数据库或者其他系统中。
缺点
Flume的配置很繁琐,source,channel,sink的关系在配置文件里面交织在一起,不便于管理。
5、应用场景
1)电子商务网站
比如我们在做一个电子商务网站,然后我们想从消费用户中访问点特定的节点区域来分析消费者的行为或者购买意图。这样我们就可以更加快速的将他想要的推送到界面上,实现这一点,我们需要将获取到的她访问的页面以及点击的产品数据等日志数据信息收集并移交给Hadoop平台上去分析,而Flume正是帮我们做到这一点。
2)内容推送
现在流行的内容推送,比如广告定点投放以及新闻私人定制也是基于此。
3)ETL工具
可以利用插件把关系型数据实时增量的导入到Hdfs外部数据源。
6、Flume插件
1)Interceptors拦截器
用于source和channel之间,用来更改或者检查Flume的events数据
2)管道选择器channels Selectors
在多管道是被用来选择使用那一条管道来传递数据(events)。管道选择器又分为如下两种:
-
默认管道选择器: 每一个管道传递的都是相同的events
-
多路复用通道选择器: 依据每一个event的头部header的地址选择管道
3)sink线程
用于激活被选择的sinks群中特定的sink,用于负载均衡
7、其它类似Flume框架
Facebook的Scribe,还有Apache另一个明星项目chukwa,还有淘宝Time Tunnel。