开发中Flume的扇出机制的使用

      实际开发中,flume的代理往往是多层嵌套的拓扑结构。所谓fan out(扇出)指的的是从一个source源向多个channnel,也就是向多个sink传递事件。正常的扇出流默认是向所有的channel复制事件,不过这个也是自定义选择的,比如可以通过source上设置一个复用选择器(multiplexing selector)来实现一些事件被送到指定的channel,另外一些事件被送到另一个channel.即我们可以通过配置复用选择器来定义路由规则。

     拓扑结构如下:

   开发中Flume的扇出机制的使用_第1张图片

案例演示:将事件同时传递到HDFS sink和logger sink。

注意:如上图channel1a,sink1a是到达HDFS,channel1b,sink1b是到达logger

agent1.sources = source1
agent1.sinks= sink1a sink1b  #多个sink,中间用空格
agent1.channels=channel1a  channel1b  #多个channel中间同样空格分割
agent1.sources.source1.channels = channnel1a  channel1b
agent1.sinks.sink1a.channnel = channel1a
agent1.sinks.sink1b.channnel =channel1b
agent1.sources.source1.type = spoodir
agnet1.sources.source1.spooDir = /tmp/spooldir
agent1.sinks.sink1a.type =hdfs
agent1.sinks.sink1a.hdfs.path=/tmp/flume
agent1.sinks.sink1a.hdfs.fileType = dataStream  #默认类型是SequenceFile,顺序文件,dataStream类似纯文本。
agent1.channels.channel1a.type =file  
agent1.channels.channel1b.type = memory 

 注意:上面两个channel配置类型不一样,一个是file,一个是memory。如果同一个机器上,配置两个channel都是file channel。那么则必须要通过配置使得它们分别指向不同的数据存储目录和检查点目录(因为默认情况下,filechannel 具有持久性,数据会被写入到本地系统,而默认情况下file channel写入的目录都是用户主目录中的同一个默认文件夹),否则会出现数据重叠覆盖的情况。

      如果两个channel都是配置的file channel,则可以如下配置:

       agent1.channels.channel1a.type =file
       agent1.channels.channel1a.checkpointDir=/tmp/agent1/file-channel1a/checkpoint
       agent1.channels.channel1a.dataDirs = /tmp/agent1/file-channel1a/data
       agent1.channels.channel1b.type =file
       agent1.channels.channel1b.checkpointDir=/tmp/agent1/file-channel1b/checkpoint
       agent1.channels.channel1b.dataDirs = /tmp/agent1/file-channel1b/data     

案例分析:

    1.Flume使用独立的事务分别完成从spooldir到每一个channel事件的传递和交付。如果其中一个事务失败,(比如channel满溢),则这些事件不会再source中删除,而是稍后等待重试。这样保证每一个事件都传递到每一个channel,sink中。

    2.具体很多参数配置,参考flume官网。

你可能感兴趣的:(flume相关)