目录
Source:
Source用于对接各种数据源,将收集到的事件发送到临时存储Channel中。
1: taildir source:
断点续传,多目录,不会丢数据
重复数据生产环境一般不处理,出现重复的概率比较低,处理会影响传输效率
如果处理重复数据一般分为两种情况
1.自身在taildir source里面增加自定义事务,但会影响效率
2.在下一级程序中处理使用去重数段
2: avro source
支持avro协议,接收RPC事件请求.avro source通过监听avro端口接收外部avro客户端流事件(event),在flume的多层架构中经常被使用接受上游sink发送的event.
3: exec source
支持linux命令,收集标准输出数据或者通过tail -f file的方式监听指定指定文件.exec source可以实现实时的消息传输,但是它不记录已经读取文件的位置,不支持断点续传,如果exec source重启或者怪掉都会造成后续增加的消息丢失,建议只是在测试环境使用
4: kafka source
对接分布式消息队列kafka,作为kafka的消费者持续从kafka中拉取数据,如果多个kafka source同时消费kafka中同一个topic,则kafka source的kafka.consumer.group.id 应该设置成相同的组id,多个kafka source之间不会消费重复的数据,每一个source都会拉取topic下的不同主题
Channel:
Channel可以理解为一种临时的存储,source将event放入channel ,sink取走它。
1: memory channel
基于内存的channel,实际就是将event存放于内存中一个固定大小的队列里,优点就是速度快,缺点是可能丢失数据
2: jdbc channel
将event存放于一个支持jdbc链接的数据库中,目前官方推荐的是Derby库,优点是数据可以恢复
3: file channel
在磁盘上指定一个目录用于存放event,同时也可以指定目录的大小.优点是数据可以恢复,缺点是相对于memory channe来说缺点是要频繁的读取磁盘,速度较慢
4: spillable memory channel
event存放在内存和磁盘上,内存作为主要存储,当内存达到一定临界点的时候会溢写到磁盘上.其中和了memory channel和file channel的优缺点
Sink:
Sink组件是用于把数据发送到目的地的组件。
1: hdfs sink
该sink把event写进hadoop分布式文件系统HDFS中,它目前支持创建文本和序列文件,它支持在两种文件类型压缩.文件可以基于数据的经过时间或者大小或者事件的数量周期性地滚动,它还通过属性把数据划分为桶或区
2: hive sink
该sink streams将包含分割文本或者JSON数据的events直接传送到hive表或者分区中.使用hive事务写events,当一系列events提交到hive时,它们马上可以被hivve查询到.
3: logger sink
loggs event在info水平,典型用法是测试或者调试
4: avro sink
这种场景比较常用 web日志通过本地flume 采集 采用 avro sink 发送到 cdh集群的落盘机,这个机子采用avro source 把数据写入hdfs或kafka
5: thrift sink
使用Thrift协议将数据写出给Thrift Source|Thrift 服务器.从配置好的channel按照配置好的批量好的批量大小批量获取events
6: irc sink
irc sink从链接的channel获取消息和推送消息到配置的irc目的地
7: null sink
当接收到channel时丢弃所有events
8: hbase sink
该sink写数据到hbase
9: async hbase sink
该sink采用异步模式写到hbase
10: morphlinesolr sink
该sink从lfume events提取数据并转换,在apache solr服务端实时加载,apache sole servers为最终用户或者搜索应用程序提供查询服务
11: elasticsearch sink
该sink写数据到elasticsearch集群
12: kafka sink
flume sink实现可以导出数据到一个kafkatopic
Interceptor:
flume拦截器介绍拦截器是简单的插件式组件,设置在source和channel之间.source接收到的事件event,在写入channel之前,拦截器都可以进行转换或者删除这些事件.
自定义拦截器
实现Interceptor
重写4个方法
initialize 初始化
public Event intercept(Event event) 处理单个Event
public List<Event> intercept(List<Event> events) 处理多个Event
close 方法
静态内部类,实现Interceptor.Builder