一、什么是Flume?

Flume是由Cloudera软件公司提供的一个高可用的,高可靠的,分布式的海量日志采集、聚合和传输的系统,后与2009年被捐赠了apache软件基金会,为hadoop相关组件之一。尤其近几年随着flume的不断被完善以及升级版本的逐一推出,特别是flume-ng;同时flume内部的各种组件不断丰富,用户在开发的过程中使用的便利性得到很大的改善,现已成为apache top项目之一。

apache Flume 是一个从可以收集例如日志,事件等数据资源,并将这些数量庞大的数据从各项数据资源中集中起来存储的工具/服务。flume具有高可用,分布式,配置工具,其设计的原理也是基于将数据流,如日志数据从各种网站服务器上汇集起来存储到HDFS,HBase等集中存储器中。

二、安装

Flume的安装很简单,目前最新版本是1.7.0,安装1.7.0要满足以下几个条件:

  1. java运行环境,要安装jdk1.7以上版本
  2. 系统内存要足够用运行agent组件source,channel和sink。
  3. 磁盘空间要足够
  4. 目录权限,agent要有足够读写权限

Flume下载最新版本后,进行解压即可,但是要确保安装了java运行环境。

PS:默认flume是不支持windows系统的,没有bat的启动命令。不过有一个flume-ng.cmd,其实它也不是启动文件,只是启动了一个powershell而已,如果你本地有这个软件,就可以在windows下运行了。

三、Flume目录结构

文件夹说明
bin存放了启动脚本
lib启动所需的所有组件jar包
conf提供了几个测试配置文件
docs文档

四、Flume Agent组件

Flume内部有一个或者多个Agent,然而对于每一个Agent来说,它就是一共独立的守护进程(JVM),它从客户端哪儿接收收集,或者从其他的 Agent哪儿接收,然后迅速的将获取的数据传给下一个目的节点sink,或者agent。

(1)Source

source 负责数据的产生或搜集,一般是对接一些RPC的程序或者是其他的flume节点的sink,从数据发生器接收数据,并将接收的数据以Flume的event格式传递给一个或者多个通道Channel,Flume提供多种数据接收的方式,比如包括avro、thrift、exec、jms、spooling directory、netcat、sequence generator、syslog、http、legacy、自定义。

类型描述
Avro监听Avro端口并接收Avro Client的流数据
Thrift监听Thrift端口并接收Thrift Client的流数据
Exec基于Unix的command在标准输出上生产数据
JMS从JMS(Java消息服务)采集数据
Spooling Directory监听指定目录
Twitter 1%通过API持续下载Twitter数据(实验阶段)
Kafka采集Kafka topic中的message
NetCat监听端口(要求所提供的数据是换行符分隔的文本)
Sequence Generator序列产生器,连续不断产生event,用于测试
Syslog采集syslog日志消息,支持单端口TCP、多端口TCP和UDP日志采集
HTTP接收HTTP POST和GET数据
Stress用于source压力测试
Legacy向下兼容,接收低版本Flume的数据
Custom自定义source的接口
Scribe从facebook Scribe采集数据

(2)channel

Channel 是一种短暂的存储容器,负责数据的存储持久化,可以持久化到jdbc,file,memory,将从source处接收到的event格式的数据缓存起来,直到它们被sinks消费掉,可以把channel看成是一个队列,队列的优点是先进先出,放好后尾部一个个event出来,Flume比较看重数据的传输,因此几乎没有数据的解析预处理。仅仅是数据的产生,封装成event然后传输。数据只有存储在下一个存储位置(可能是最终的存储位置,如HDFS;也可能是下一个Flume节点的channel),数据才会从当前的channel中删除。这个过程是通过事务来控制的,这样就保证了数据的可靠性。

不过flume的持久化也是有容量限制的,比如内存如果超过一定的量,不够分配,也一样会爆掉。

类型描述
MemoryEvent数据存储在内存中
JDBCEvent数据存储在持久化存储中,当前Flume Channel内置支持Derby
KafkaEvent存储在kafka集群
File ChannelEvent数据存储在磁盘文件中
Spillable Memory ChannelEvent数据存储在内存中和磁盘上,当内存队列满了,会持久化到磁盘文件(当前试验性的,不建议生产环境使用)
Pseudo Transaction Channel测试用途
Custom Channel自定义Channel实现

(3)sink

sink 负责数据的转发,将数据存储到集中存储器比如Hbase和HDFS,它从channel消费数据(events)并将其传递给目标地。目标地可能是另一个sink,也可能是hdfs、logger、avro、thrift、ipc、file、null、Hbase、solr、自定义等。

类型描述
HDFS数据写入HDFS
HIVE数据导入到HIVE中
Logger数据写入日志文件
Avro数据被转换成Avro Event,然后发送到配置的RPC端口上
Thrift数据被转换成Thrift Event,然后发送到配置的RPC端口上
IRC数据在IRC上进行回放
File Roll存储数据到本地文件系统
Null丢弃到所有数据
Hive数据写入Hive
HBase数据写入HBase数据库
Morphline Solr数据发送到Solr搜索服务器(集群)
ElasticSearch数据发送到Elastic Search搜索服务器(集群)
Kite Dataset写数据到Kite Dataset,试验性质的
Kafka数据写到Kafka Topic
Custom自定义Sink实现

五、Flume有哪些优缺点

(1)优点

  1. Flume可以将应用产生的数据存储到任何集中存储器中,比如HDFS,HBase。
  2. 当收集数据的速度超过将写入数据的时候,也就是当收集信息遇到峰值时,这时候收集的信息非常大,甚至超过了系统的写入数据能力,这时候,Flume会在数据生产者和数据收容器间做出调整,保证其能够在两者之间提供一共平稳的数据。
  3. 提供上下文路由特征。
  4. Flume的管道是基于事务,保证了数据在传送和接收时的一致性。
  5. Flume是可靠的,容错性高的,可升级的,易管理的,并且可定制的。
  6. 实时性,Flume有一个好处可以实时的将分析数据并将数据保存在数据库或者其他系统中。

(2)缺点

Flume的配置很繁琐,source,channel,sink的关系在配置文件里面交织在一起,不便于管理。

六、应用场景

(1)电子商务网站

比如我们在做一个电子商务网站,然后我们想从消费用户中访问点特定的节点区域来分析消费者的行为或者购买意图. 这样我们就可以更加快速的将他想要的推送到界面上,实现这一点,我们需要将获取到的她访问的页面以及点击的产品数据等日志数据信息收集并移交给Hadoop平台上去分析,而Flume正是帮我们做到这一点。

(2)内容推送

现在流行的内容推送,比如广告定点投放以及新闻私人定制也是基于此。

(3)ETL工具

可以利用插件把关系型数据实时增量的导入到Hdfs外部数据源。

七、其他类似Flume框架

Facebook的Scribe,还有Apache新出的另一个明星项目chukwa,还有淘宝Time Tunnel

八、Flume插件

(1)Interceptors拦截器

用于source和channel之间,用来更改或者检查Flume的events数据

(2)管道选择器 channels Selectors

在多管道是被用来选择使用那一条管道来传递数据(events). 管道选择器又分为如下两种:

  • 默认管道选择器: 每一个管道传递的都是相同的events
  • 多路复用通道选择器: 依据每一个event的头部header的地址选择管道.

(3)sink线程

用于激活被选择的sinks群中特定的sink,用于负载均衡.

九、启动参数详解

你可以输入flume-ng help获得帮助提示:

参数描述
commands这个是很重要的参数,因为flume可以使用不同的角色启动,比如agent以及client等等。暂时搞不清楚avro-client有什么特殊的,先了解一下吧!平时启动就使用agent就可以了
--conf 或者 -c指定去conf目录下加载配置文件
--classpath 或者 -C指定类加载的路径
--conf-file 或者 -f指定配置文件

总结

关于flume的agent组件source,channel,sink的详细配置,将会在后面的文章中给出。老规矩:如果大家有大数据技术类的问题,欢迎在评论里面留言,我会一一回复,希望跟大家共同努力,共同进步,由于自己也在学习阶段,水平有限,还请专业的高手给予指点,提提意见,一起交流分享经验,帮助我尽快提高水平,更上一个新台阶。

扫码关注李苦李公众号

李苦李公众号

标签: 大数据, Flume

仅有一条评论

  1. A

    老哥 commands 里的 avro-client 启动后 可能是 用于 rpc 日志采集的

添加新评论