Flume Channel Selectors

如果没有手动配置,source的默认channel选择器类型是replicating(复制),当然这个选择器只针对source配置了多个channel的时候。

提示

既然叫做channel选择器,很容易猜得到这是source才有的配置。前面介绍过,一个souce可以向多个channel同时写数据,所以也就产生了以何种方式向多个channel写的问题(比如自带的 复制选择器 ,会把数据完整地发送到每一个channel,而 多路复用选择器 就可以通过配置来按照一定的规则进行分发,听起来很像负载均衡),channel选择器也就应运而生。

复制选择器

它是默认的选择器

必需的参数已用 粗体 标明。


属性

默认值

解释

selector.type

replicating

replicating

selector.optional



指定哪些channel是可选的,多个用空格分开

配置范例:

  1. a1.sources = r1
  2. a1.channels = c1 c2 c3
  3. a1.sources.r1.selector.type = replicating
  4. a1.sources.r1.channels = c1 c2 c3
  5. a1.sources.r1.selector.optional = c3

上面这个例子中,c3配置成了可选的。向c3发送数据如果失败了会被忽略。c1和c2没有配置成可选的,向c1和c2写数据失败会导致事务失败回滚。

多路复用选择器

必需的参数已用 粗体 标明。


属性

默认值

解释

selector.type

replicating

组件类型,这个是: multiplexing

selector.header

flume.selector.header

想要进行匹配的header属性的名字

selector.default



指定一个默认的channel。如果没有被规则匹配到,默认会发到这个channel上

selector.mapping.*



一些匹配规则,具体参考下面的例子

配置范例:

  1. a1.sources = r1
  2. a1.channels = c1 c2 c3 c4
  3. a1.sources.r1.selector.type = multiplexing
  4. a1.sources.r1.selector.header = state #以每个Event的header中的state这个属性的值作为选择channel的依据
  5. a1.sources.r1.selector.mapping.CZ = c1 #如果state=CZ,则选择c1这个channel
  6. a1.sources.r1.selector.mapping.US = c2 c3 #如果state=US,则选择c2 和 c3 这两个channel
  7. a1.sources.r1.selector.default = c4 #默认使用c4这个channel

自定义选择器

自定义选择器就是你可以自己写一个 org.apache.flume.ChannelSelector 接口的实现类。老规矩,你自己写的实现类以及依赖的jar包在启动时候都必须放入Flume的classpath。


属性

默认值

解释

selector.type



你写的自定义选择器的全限定类名,比如:org.liyifeng.flume.channel.MyChannelSelector

配置范例:

  1. a1.sources = r1
  2. a1.channels = c1
  3. a1.sources.r1.selector.type = org.liyifeng.flume.channel.MyChannelSelector