flume内置的ChannelSelector有两种,分别是Replicating和Multiplexing。

Replicating类型的ChannelSelector会针对每一个Event,拷贝到所有的Channel中,这是默认的ChannelSelector。

replicating类型的ChannelSelector例子如下

  1. a1.sources = r1
  2. a1.channels = c1 c2 # 如果有100个Event,那么c1和c2中都会有这100个事件
  3.  
  4. a1.channels.c1.type = memory
  5. a1.channels.c1.capacity =
  6. a1.channels.c1.transactionCapacity =
  7.  
  8. a1.channels.c2.type = memory
  9. a1.channels.c2.capacity =
  10. a1.channels.c2.transactionCapacity =

Multiplexing类型的ChannelSelector会根据Event中Header中的某个属性决定分发到哪个Channel。

multiplexing类型的ChannelSelector例子如下:

  1. a1.sources = r1
  2.  
  3. a1.sources.source1.selector.type = multiplexing
  4. a1.sources.source1.selector.header = validation # 以header中的validation对应的值作为条件
  5. a1.sources.source1.selector.mapping.SUCCESS = c2 # 如果header中validation的值为SUCCESS,使用c2这个channel
  6. a1.sources.source1.selector.mapping.FAIL = c1 # 如果header中validation的值为FAIL,使用c1这个channel
  7. a1.sources.source1.selector.default = c1 # 默认使用c1这个channel
  1. a1.sources.source1.selector.header = validation # 以header中的validation对应的值作为条件
  2.  
  3. 同理,如下conf文件:
  1. a1.sources = r1
  2. a1.sinks = k1 k2
  3. a1.channels = c1 c2
  4.  
  5. # Describe/configure the source
  6. a1.sources.r1.type = exec
  7. a1.sources.r1.command = tail -F /usr/lib/flume-ng/test.log
  8. a1.sources.r1.interceptors = i1
  9. a1.sources.r1.interceptors.i1.type = regex_extractor
  10. a1.sources.r1.interceptors.i1.regex = (\\w+):(\\w+):(\\w+)
  11. a1.sources.r1.interceptors.i1.serializers = s1 s2 s3
  12. a1.sources.r1.interceptors.i1.serializers.s1.name = ip
  13. a1.sources.r1.interceptors.i1.serializers.s2.name = domain
  14. a1.sources.r1.interceptors.i1.serializers.s3.name = course
  15.  
  16. a1.sources.r1.selector.type = multiplexing
  17. a1.sources.r1.selector.header = course
  18. a1.sources.r1.selector.mapping.hadoop = c1
  19. a1.sources.r1.selector.default = c2
  20.  
  21. # Describe the sink
  22. a1.sinks.k1.type = file_roll
  23. a1.sinks.k1.channel = c1
  24. a1.sinks.k1.sink.directory = /tmp/multiplexing/flume_sink1
  25.  
  26. a1.sinks.k2.type = file_roll
  27. a1.sinks.k2.channel = c2
  28. a1.sinks.k2.sink.directory = /tmp/multiplexing/flume_sink2
  29.  
  30. # Use a channel which buffers events in memory
  31. a1.channels.c1.type = memory
  32. a1.channels.c1.capacity =
  33. a1.channels.c1.transactionCapacity =
  34.  
  35. a1.channels.c2.type = memory
  36. a1.channels.c2.capacity =
  37. a1.channels.c2.transactionCapacity =
  38.  
  39. # Bind the source and sink to the channel
  40. a1.sources.r1.channels = c1 c2
  41. a1.sinks.k1.channel = c1
  42. a1.sinks.k2.channel = c2

interceptor只对头部进行改变。

source r1中的头部有IP、Domain和cource三种信息,而r1的selector.header = course,表示selector只对IP,Domain和Cource中的Cource进行判断选择,然后再划分channel。

关于Flume中Chanel.Selector.header解释的更多相关文章

  1. flume中Source

    Spooling Directory Source: 以下2组参数解释: fileHeader及fileHeaderKey:fileHeader是个布尔值,可配置为true或者false,表示在flu ...

  2. flume中的拦截器

    Flume中的拦截器(interceptor),用户Source读取events发送到Sink的时候,在events header中加入一些有用的信息,或者对events的内容进行过滤,完成初步的数据 ...

  3. epoll浅析以及nio中的Selector

    出处: https://my.oschina.net/hosee/blog/730598 首先介绍下epoll的基本原理,网上有很多版本,这里选择一个个人觉得相对清晰的讲解(详情见reference) ...

  4. epoll 浅析以及 nio 中的 Selector

    首先介绍下epoll的基本原理,网上有很多版本,这里选择一个个人觉得相对清晰的讲解(详情见reference): 首先我们来定义流的概念,一个流可以是文件,socket,pipe等等可以进行I/O操作 ...

  5. 关于flume中涉及到时间戳的错误解决,Expected timestamp in the Flume even

    在搭建flume集群收集日志写入hdfs时发生了下面的错误: java.lang.NullPointerException: Expected timestamp in the Flume event ...

  6. Java I/O(4):AIO和NIO中的Selector

    您好,我是湘王,这是我的博客园,欢迎您来,欢迎您再来- 在Java NIO的三大核心中,除了Channel和Buffer,剩下的就是Selector了.有的地方叫它选择器,也有叫多路复用器的(比如Ne ...

  7. flume中的agent配置和启动

    首先创建一个文件example.conf(touch example.conf) 然后在文件中,进行agent文件的如下的配置(vi  example.conf)   agent文件的配置:(配置ag ...

  8. 关于flume中的几个疑惑

    文章发自http://www.cnblogs.com/hark0623/p/4205756.html  转载请注明 flume越用越有一些疑惑,这个月中按计划是要阅读flume源码的,我希望能解决我的 ...

  9. VC中Source Files, Header Files, Resource Files,External Dependencies的区别

    VC中Source Files, Header Files, Resource Files,External Dependencies的区别 区别: Source Files 放源文件(.c..cpp ...

随机推荐

  1. JavaScript--表单处理(27)

    一 表单介绍 // 在HTML中,表单是由<form>元素来表示的,而在JavaScript中,表单对应的则是HTMLFormElement类型; // HTMLFormElement继承 ...

  2. 01-Javascript简介(了解)

    [转]01-Javascript简介(了解) Web前端有三层: HTML:从语义的角度,描述页面结构 CSS:从审美的角度,描述样式(美化页面) JavaScript:从交互的角度,描述行为(提升用 ...

  3. SPOJ4580 ABCDEF(meet in the middle)

    题意 题目链接 Sol 发现abcdef是互不相关的 那么meet in the middle一下.先算出abc的,再算def的 注意d = 0的时候不合法(害我wa了两发..) #include&l ...

  4. canvas与svg特性和使用对比

    什么是 Canvas? HTML5 的 canvas 元素使用 JavaScript 在网页上绘制图像. 画布是一个矩形区域,您可以控制其每一像素. canvas 拥有多种绘制路径.矩形.圆形.字符以 ...

  5. 【代码笔记】iOS-NSLog的使用

    代码: // 在debug模式下输出NSLog,在release模式下不输出NSLog #ifndef __OPTIMIZE__ #define NSLog(...) NSLog(__VA_ARGS_ ...

  6. ajax分页查询

    (1)先写个显示数据的页面,分页查询需要那几个部分呢? 1.首先是查询的文本框输入,还有查询按钮,那么就开始写代码吧 1 2 3 4 <div> <input type=" ...

  7. 接口自动化 基于python实现的http+json协议接口自动化测试框架源码(实用改进版)

    基于python实现的http+json协议接口自动化测试框架(实用改进版)   by:授客 QQ:1033553122 欢迎加入软件性能测试交流QQ群:7156436     目录 1.      ...

  8. 在Android Native层中创建Java虚拟机实例

    前言 Android应用中JNI代码,是作为本地方法运行的.而大部分情况下,这些JNI方法均需要传递Dalvik虚拟机实例作为第一个参数.例如,你需要用虚拟机实例来创建jstring和其他的Java对 ...

  9. 【three.js练习程序】创建简单物理场景

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...

  10. go语言练习:数组

    1.创建数组: package main import "fmt" func main() { var lst = [3]int{1, 2, 3} //var name=[数量]类 ...