Flume Channel Selectors
如果没有手动配置,source的默认channel选择器类型是replicating(复制),当然这个选择器只针对source配置了多个channel的时候。
提示
既然叫做channel选择器,很容易猜得到这是source才有的配置。前面介绍过,一个souce可以向多个channel同时写数据,所以也就产生了以何种方式向多个channel写的问题(比如自带的 复制选择器 ,会把数据完整地发送到每一个channel,而 多路复用选择器 就可以通过配置来按照一定的规则进行分发,听起来很像负载均衡),channel选择器也就应运而生。
复制选择器
它是默认的选择器。
必需的参数已用 粗体 标明。
属性 | 默认值 | 解释 |
---|---|---|
selector.type | replicating | replicating |
selector.optional | – | 指定哪些channel是可选的,多个用空格分开 |
配置范例:
- a1.sources = r1
- a1.channels = c1 c2 c3
- a1.sources.r1.selector.type = replicating
- a1.sources.r1.channels = c1 c2 c3
- 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.* | – | 一些匹配规则,具体参考下面的例子 |
配置范例:
- a1.sources = r1
- a1.channels = c1 c2 c3 c4
- a1.sources.r1.selector.type = multiplexing
- a1.sources.r1.selector.header = state #以每个Event的header中的state这个属性的值作为选择channel的依据
- a1.sources.r1.selector.mapping.CZ = c1 #如果state=CZ,则选择c1这个channel
- a1.sources.r1.selector.mapping.US = c2 c3 #如果state=US,则选择c2 和 c3 这两个channel
- a1.sources.r1.selector.default = c4 #默认使用c4这个channel
自定义选择器
自定义选择器就是你可以自己写一个 org.apache.flume.ChannelSelector 接口的实现类。老规矩,你自己写的实现类以及依赖的jar包在启动时候都必须放入Flume的classpath。
属性 | 默认值 | 解释 |
---|---|---|
selector.type | – | 你写的自定义选择器的全限定类名,比如:org.liyifeng.flume.channel.MyChannelSelector |
配置范例:
- a1.sources = r1
- a1.channels = c1
- a1.sources.r1.selector.type = org.liyifeng.flume.channel.MyChannelSelector
当前内容版权归 liyifeng 译 或其关联方所有,如需对内容或内容相关联开源项目进行关注与资助,请访问 liyifeng 译 .