多路复用技术意在可以将一个event根据配置信息发送特定的channel上。
A source instance can specify multiple channels, but a sink instance can only specify one channel.
Flume supports fanning out the flow from one source
to multiple channels. There are two modes of fan out, replicating and multiplexing
flume支持的从source到多个channel有两种输出方式:复制 和 复用
1、复制模式下,source收到的event data是输出到配置的所有channel上
2、复用模式下,source收到的event data是输出到配置的特定的channel上
首先这种模式的选择,flume中通过selector选择器来选择,默认是复制模式
# list the sources, sinks and channels in the agent agent_foo.sources = avro-AppSrv-source1 agent_foo.sinks = hdfs-Cluster1-sink1 avro-forward-sink2 agent_foo.channels = mem-channel-1 file-channel-2 # set channels for source agent_foo.sources.avro-AppSrv-source1.channels = mem-channel-1 file-channel-2 # set channel for sinks agent_foo.sinks.hdfs-Cluster1-sink1.channel = mem-channel-1 agent_foo.sinks.avro-forward-sink2.channel = file-channel-2 # channel selector configuration agent_foo.sources.avro-AppSrv-source1.selector.type = multiplexing agent_foo.sources.avro-AppSrv-source1.selector.header = State agent_foo.sources.avro-AppSrv-source1.selector.mapping.CA = mem-channel-1 agent_foo.sources.avro-AppSrv-source1.selector.mapping.AZ = file-channel-2 agent_foo.sources.avro-AppSrv-source1.selector.mapping.NY = mem-channel-1 file-channel-2 agent_foo.sources.avro-AppSrv-source1.selector.default = mem-channel-1想上面这种情况就是一个复用通道的模式,这里的header是event 数据的header,根据header的值来判断输出到哪一个通道上。
当然上面这种情况适用于将数据源收集代码耦合在自身应用代码中的情况,因为解耦后通过其它方式而不涉及代码来收集数据,你是无法决定这个event的header数据内容的。
复制模式就更简单了,略!
【Flume】flume的多路复用技术multiplexing
原文地址:http://blog.csdn.net/simonchi/article/details/42672561