Flume 总结(三)sources类型
1. 官网
- http://flume.apache.org/releases/content/1.9.0/FlumeUserGuide.html
- 注意区分flume版本
2. sources
- avro sources
这里可以看出,这里使用的avro通用序列化协议,可以组成agent之间的级联
参数最重要就是黑色的, 端口和ip地址
注意这里涉及到拦截器和选择器
拦截器可以对数据做清洗,筛选,打标记
选择器可以根据event的标记,对数据做分发处理,可以有各种分发逻辑,如replicating和multiplexing等策略
- thrift source
顾名思义,这里可以采集来自thrift通用服务器的数据,可以组成agent之间的级联
这里最重要也是端口和ip
注意,这里也有拦截器和选择器,具体看1中解释
这里涉及到kerberos,这是大数据企业开发中,比较严格的权限管理时,使用的一种权限管理协议或者工具软件(它也是一个软件)
- exec source
注意,这里就是监视一个unix或者linux shell命令产生的数据
这里最重要就是执行的shell 指令
注意,因为这个source是无法进行事务保证的,一旦出错,数据会丢失,所以官方推荐了另外2个source,taildir source和spooling directory source
- JMS Source
这是和activeMQ消息队列组件结合使用的,顾名思义。
- JMS message converter
- SSL and JMS Source
- JMS
注意,这里涉及到安全加密协议,SSL,实际企业大数据开发中,如果涉及到保险,银行等金融领域,很多时候如果数据不是内网传输,而是公网传输,一般都会采用加密协议来保证数据安全性。虽然这些数据主要是日志数据,但还是会进行加密处理。
- Spooling Directory Source
这是一个可靠的source,可以保证数据不丢失,但可能重复
重点是文件夹的监视,文件夹中文件不能再放进去之后再改动或者修改名字,或者同名文件。所以适合已经产生的固定一批日志文件的采集。
注意这里也有拦截器和选择处理
这里还有采集后文件的处理策略,还有递归查找,还有batchSize,也就是一批读取采集数量,一般这类文件采集框架,很少会一条一条处理,一般都是一批一批处理,这样更加高效。具体可以类比java的缓冲流进行读写,包括linux文件流中的缓冲区机制,都是一样的道理。通过批处理来降低磁盘IO。这一点只要硬盘达不到内存的读写速度,就会一直存在。
- Taildir Source
不能读取二进制文件
数据读取是可靠的,对文件的偏移量会进行记录来保证失败后可以重试‘
这里可以监视文件组,也就是可以监视文件夹以及其中多个文件
可以设置batchSize,可以根据文件对event中设置header标记,这里很适合一些公司中只有一个日志集群,日志文件并没有很好进行划分的场景,这时候只要不同业务日志放在不同文件夹或者文件中,就可以通过这里设置header中key,然后使用selector选择器进行数据区分分发
- Twitter 1% firehose Source (experimental)
这是一个实验性质特性,了解即可,不要企业生产中使用
- Kafka Source
可以读取kafaka中数据,一般按照topic进行读取
注意还有过期的特性
如果是kafaka集群,集群地址加端口,多个地址使用逗号隔开
注意kafaka中数据也可以使用偏移量,或者叫编号进行读取。
kafaka中数据读取的安全策略,可以使用kerberos或者ssl两种安全协议
注意,在大数据企业开发中,如果涉及到金钱如保险,支付,银行等领域,如果日志数据采用公网传输采集,这时候一般都会使用安全协议来保证日志数据传输安全性。
- NetCat TCP Source
简单的网络数据来源采集,TCP形式数据
- NetCat UDP Source
简单的网络数据来源采集,TCP形式数据
- Sequence Generator Source
- Syslog Sources
- Syslog TCP Source
- Multiport Syslog TCP Source
- Syslog UDP Source
- HTTP Source
- Stress Source
适合做压力测试
- Legacy Sources
- Avro Legacy Source
- Thrift Legacy Source
- Custom Source
自定义source,当日志数据flume自己提供的source无法解析时,就需要使用自定义source,当然还可以选择其他分布式日志采集框架
实现思路:
1,找到自定义source所要实现或继承的父类/接口
2,重写方法(插入自己的需求逻辑)
3,将代码打成jar包,传入flume的lib目录
4,写配置文件调用自定义的source
source调用顺序:
1, source是由 SourceRunner—>EventDrivenSourceRunner来调用
2, sourceRunner 拿到 source实例对象
3, 然后调 source的start方法
source读数据,然后将数据转成event
4, 然后将event传给channelprocessor.processEvent(event)
processEvent中第一个动作就是调用拦截器拦截这个event,然后再往channel中写入
- 多线程实现版本
package cn.doit.flume.custom;
import org.apache.commons.io.FileUtils;
import org.apache.commons.lang.StringUtils;
import org.apache.flume.Context;
import org.apache.flume.Event;
import org