Flume学习笔记之初识(二)

来源:互联网 发布:国家数据统计数据库 编辑:程序博客网 时间:2024/06/08 03:14

三、flume数据流
一个source可以有多个channel,
但一个sink只能有一个channel
source、channel、sink均需要设定一个type属性,来表示组件的类型。 可配置内置的type名称,如netcat、memory、hdfs
(详见SourceType.java、ChannelType.java、SinkType.java)
或配置自定义类名,如org.apache.flume.source.scribe.ScribeSource、org.apache.flume.channel.kafka.KafkaChannel等
1 single flow

这里写图片描述

2 multiple flow
这里写图片描述

3 multi agent flow
两个agent可以通过avro数据传输格式连接:
这里写图片描述
图:agent1的sink与agent2的source需采用avro/thrift对接

4 fan out flow

方式1:replicating 一个event将发送至所有的channel
这里写图片描述

方式2:multiplexing 一个event根据header进行mapping, 发送至相应的channel;匹配不到的发送 至default对应的channel

这里写图片描述

举例:
fan out flow - multiplexing例子
这里写图片描述
channel分为两种:
(1) required channel:若未能全部写入成功,则transaction失败。如果没有mapping成功,则写入default channel ,default channel 采用 required channel 的 机制。
(2) optional channel : 若未能写入成功,则被忽略,transaction不会失败

详见源码:
MultiplexingChannelSelector.java
这里写图片描述
ChannelProcessor.java
这里写图片描述

从ChannelProcessor.java源码中,可以看出,events在写入channel前,会先经过interceptor chain
进行处理,可以修改或丢弃event 。
5 Interceptor
这里写图片描述
type可为alias或类名,参考InterceptorType.java
内置Interceptor:timestamp、host、static、uuid、regex_filter、
regex_extractor
自定义Interceptor:实现Interceptor接口,参考TimestampInterceptor.java

0 0
原创粉丝点击