Flume也是apache基金的一个开源项目,由cloudera公司开发的一款分布式、高可靠、高可用的日志传输工具。其以agent为一个单位,agent由source、channel和sink构成。一个agent最少由一个source、channel和sink构成,数量可以自由组合
Source主要用来收集源数据,并对源数据进行反序列化。Source在读取数据文件时,会遍历日志文件中的每一行,并把这一行封装在一个event当中,一个event包含一个header和一个body,header是一个头文件,存放着这个event的一些信息数据,body存放的是我们实际要传输的数据。
Channel是一个数据的聚合和暂时存放的地方,数据在channel中存放的时间不会很长,可以根据配置被sink取走。其类型可以为内存、jdbc和file等
Sink负责将channel的数据传输到目的端,并且可以在传输过程中指定数据落地的方式的顺序。类型可以由hdfs、kafka、hbase等。
Flume的高可用和高可靠性体现在1.在source和channel之间数据传输和channel和sink之间用事务的方式来保证数据传输的可靠性,当有一个环节数据传输失败时,事务会进行回滚,并进行重新传输。2。Flume可以通过在日志服务器部署多套来防止单点故障的问题,当一个flume节点出现故障时,可以自动进行故障转移。
第二部分 flume的几种常见架构的应用
一、链式结构
Hadoop学习笔记系列四:hadoop项目流程-传输工具flume(一)
此种结构适合数据需要处理的情况,每一个agent环境进行一次数据处理,这种链式结构可以进行多次数据处理,并且使数据处理更加灵活。
二、分布式架构
Hadoop学习笔记系列四:hadoop项目流程-传输工具flume(一)
此种架构适合于避免单点故障的高可用场景和多个源数据存放的场景,通过在一台机器上部署多个agent达到高可用,可以在多个数据源的服务器上同时进行数据源的收集。当然此种场景也可以倒过来使用,通过一个agent收集单一数据源可以分别往不用的目的端进行分发
三、网状结构
Hadoop学习笔记系列四:hadoop项目流程-传输工具flume(一)
此种架构基于flume的agent的三个组件数量的灵活性,可以自由组合,满足更复杂的业务场景。
第三部分 flume详情和配置
一.Source
Source主要用来获取源数据并推送给channel,source支持的类型主要有
(1) Avro source
监听Avro端口,从Avro client streams接收events。
(2) Thrift source
监听Thrift端口和从外部Thrift client streams接收events
(3) exec source
Exec Source在启动时运行一个Unix命令行,并期望这过程在标准输出上连续生产数据,经常结合linux命令的tail -f xxx.log命令来不断获取最新日志
(4) JMS source
从jms目标(如队列或者主题)读取消息。JMS应用程序应该可以与任何JMS提供程序一起工作,但是只能使用ActiveMQ进行测试
(5) Spooling Directory source
source让你通过放置被提取文件在磁盘”spooling“目录下这一方式,提取数据。该source将会监控指定目录的新增文件,当新文件出现时解析event。event解析逻辑是可插入的。当一个给定文件被全部读取进channel之后,它被重命名,以标识为已完成(或者可选择deleted)
(6) kaska source
Kafka Source是Apache Kafka消费者,从Kfaka topics读取消息。如果你有多个Kafka source在跑,你可以配置它们在相同的Consumer Group,以使它们每个读取topics独特的分区。
(7) netcat tcp source
netcat source监听一个给定的端口,然后把text文件的每一行转换成一个event。
Flume source支持的类型还有很多,这里只列举常见的几种,在flume的官方网站上有详细的类型解释和配置要求。
- Flume source拦截器
拦截器(interceptor)在配置在source和channel之间的,用来做数据的拦截,一般有:
(1)timestamp interceptor ,在event的header中添加一个key为timestamp,value为当前的时间戳,可以通过配置,让source按照配置的时间范围来给channel推送数据
(2)Host interceptor 在event的header中添加一个key为host,value为当前的机器的hostname或者ip,可以通过hostname或者ip来筛选数据
(3)Static interceptor 在event的header中自定义添加一个key value的值,按照关键字来筛选源数据
(4)Regex filtering interceptor 通过正则表达式来筛选包含匹配值的events
(5)Regex Extractor Interceptor 在header中添加key value值通过正则表达式来筛选合适的数据
今天先到这里,还有几个问题,header和event的详情,以及详细的安装配置和运行,还有channel和sink留给明天吧!
原文地址:http://blog.51cto.com/14069088/2315538