🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
负载均衡维护一个活动 Sink列表的索引来实现负载的分配。支持了 **轮询(round_robin)** 和 **随机(random)** 两种选择机制分配负载,默认是轮询,可以通过配置来更改。也可以从 AbstractSinkSelector 继承写一个自定义的选择器。 :-: ![](https://img.kancloud.cn/55/e2/55e2159707eedb0bb0c99b5fb17792cc_1043x607.png) 负载均衡 Agent1会根据负载的机制来选择上面三个Sink中的哪一个进行工作。 <br/> 工作时,此选择器使用其配置的选择机制选择下一个 Sink 并调用它。如果所选Sink无法正常工作,则处理器通过其配置的选择机制选择下一个可用Sink。此实现不会将失败的 Sink 列入黑名单,而是继续乐观地尝试每个可用的 Sink。 <br/> 如果所有 Sink 调用都失败了,选择器会将故障抛给 Sink 的运行器。<br/> 如果backoff设置为true则启用了退避机制,失败的Sink会被放入黑名单,达到一定的超时时间后会自动从黑名单移除。如从黑名单出来后Sink仍然失败,则再次进入黑名单而且超时时间会翻倍,以避免在无响应的 Sink 上浪费过长时间。 如果没有启用退避机制,在禁用此功能的情况下,发生 Sink 传输失败后,会将本次负载传给下一个 Sink 继续尝试,因此这种情况下是不均衡的。<br/> 示例: ```conf ######### Agent ############ a1.sources = r1 a1.channels = c1 a1.sinks = s1 s2 s3 # Sink 组逻辑器 a1.sinkgroups = g1 ######### Sources ########## a1.sources.r1.type = netcat a1.sources.r1.bind = hadoop101 a1.sources.r1.port = 6666 ########### SinkGroups ############# # 将上面定义的Sink加入到组中 a1.sinkgroups.g1.sinks = s1 s2 s3 # load_balance为负载均衡组件 a1.sinkgroups.g1.processor.type = load_balance # 失败的 sink 是否成倍地增加退避它的时间。 a1.sinkgroups.g1.processor.backoff = true # 负载均衡机制,可选值:round_robin (轮询)、 random (随机选择)、「自定义选择器的全限定类名」 a1.sinkgroups.g1.processor.selector = random ############ Channel ########### a1.channels.c1.type = memory ########## Sinks ################ a1.sinks.s1.type = avro a1.sinks.s1.hostname = hadoop101 a1.sinks.s1.port = 7777 a1.sinks.s2.type = avro a1.sinks.s2.hostname = hadoop101 a1.sinks.s2.port = 8888 a1.sinks.s3.type = avro a1.sinks.s3.hostname = hadoop101 a1.sinks.s3.port = 9999 ########## 连接 ########### a1.sources.r1.channels = c1 a1.sinks.s1.channel = c1 a1.sinks.s2.channel = c1 a1.sinks.s3.channel = c1 ```