sink groups使多个不同的sink组成一个整体,而sink processor提供了组内负载均衡和故障转移的功能。
有三种sink processor :default sink processor,failover sink processor,Load balancing Sink Processor。
default sink processor
一般的单独的sink
failover sink processor
维护了一个sinks的优先级列表,保证只要有一个sink事件就可以被处理(即故障转移)。
sink优先级高的会被优先激活,若没有设置优先级则按照snk被声明的顺序来决定优先级。
设置如下:
inks | – | 多个sink用空格分开。 |
processor.type | default |
组件的名称,必须是:failover |
processor.priority.<sinkName> | – | 优先级值。<sinkName> 必须是sinks中有定义的。优先级值高Sink会更早被激活。值越大,优先级越高。 注:多个sinks的话,优先级的值不要相同,如果优先级相同的话,只会有一个生效。且failover时,同优先级的不会Failover,就算是同优先级的还存在也会报All sinks failed to process。 |
processor.maxpenalty | 30000 | 失败的Sink最大的退避时间(单位:毫秒)(退避算法(退避算法为我们在解决重试某项任务的时候,提供了一个比较好的等待思想。),参考:http://qiuqiang1985.iteye.com/blog/1513049) |
示例:
a1.sinkgroups = g1
a1.sinkgroups.g1.sinks = k1 k2
a1.sinkgroups.g1.processor.type = failover
a1.sinkgroups.g1.processor.priority.k1 = 5
a1.sinkgroups.g1.processor.priority.k2 = 10
a1.sinkgroups.g1.processor.maxpenalty = 10000
Load balancing Sink Processor
提供了多个sinks负载均衡的能力。它维护了一个active sinks的索引列表,列表中fenb的sinks的负载必须是分布式的。
通过round_robin (轮询)或 random(随机)选择机制实现了分布式负载。选择机制默认为round_robin ,也可通过设置重载。自定义选举类须继承AbstractSinkSelector。
当被调用时,选择器根据配置文件的选择机制挑选下一个sink,并且调用该sink。如果所选的Sink传递Event失败,则通过选择机制挑选下一个可用的Sink,以此类推。失效的sink不会被加入到黑名单里,选择器会继续尝试所有可用的sink。所有的被调用的sink都失败后,选择器才会把失败发送给sink runner。
要是backoff属性可用,sink processor会把失败的sink拉黑,并移除在给定的超时时间内把它们从选择中移除。
设置如下:
processor.sinks | – | 多个sink用空格分开。 |
processor.type | default |
组件的名称,必须是:load_balance |
processor.backoff | false | 是否以指数的形式退避失败的Sinks。 |
processor.selector | round_robin |
选择机制。必须是round_robin ,random 或者自定义的类,该类继承了AbstractSinkSelector |
processor.selector.maxTimeOut | 30000 |
默认是30000毫秒,屏蔽故障sink的时间 |
示例:
a1.sinkgroups = g1
a1.sinkgroups.g1.sinks = k1 k2
a1.sinkgroups.g1.processor.type = load_balance
a1.sinkgroups.g1.processor.backoff = true
a1.sinkgroups.g1.processor.selector = random