负载均衡的Log4J Appender

使用log4j Appender发送Event到多个运行着Avro Source的Flume Agent上。使用的时候log4j客户端必须要在classpath引入flume-ng-sdk(比如:flume-ng-sdk-1.8.0.jar)。这个appender支持轮询和随机的负载方式,它也支持配置一个退避时间,以便临时移除那些挂掉的Flume Agent。必需的参数已用 粗体 标明。

提示

这是上面Log4j Appender的升级版,支持多个Flume实例的负载均衡发送,配置也很类似,没什么可说的了。


属性

默认值

解释

Hosts



host:port格式的Flume Agent(运行着Avro Source)地址列表,多个用空格分隔

Selector

ROUNDROBIN

appender向Flume Agent发送Event的选择机制。可选值有:ROUND_ROBIN (轮询)、 RANDOM (随机) 或者自定义选择器的全限定类名(自定义选择器必须继承自 _LoadBalancingSelector)

MaxBackoff



一个long型数值,表示负载平衡客户端将无法发送Event的节点退避的最长时间(毫秒)。 默认不启用规避机制

UnsafeMode

false

如果为true,log4j的appender在发送Event失败时不会抛出异常

AvroReflectionEnabled

false

是否使用Avro反射来序列化log4j的Event(当log是字符串时不要开启)

AvroSchemaUrl



一个能检索到Avro结构的url

log4j.properties 文件配置范例:

  1. #...
  2. log4j.appender.out2 = org.apache.flume.clients.log4jappender.LoadBalancingLog4jAppender
  3. log4j.appender.out2.Hosts = localhost:25430 localhost:25431
  4.  
  5. # configure a class's logger to output to the flume appender
  6. log4j.logger.org.example.MyClass = DEBUG,flume
  7. #...

使用随机(RANDOM )负载均衡方式的log4j.properties 文件配置范例:

  1. #...
  2. log4j.appender.out2 = org.apache.flume.clients.log4jappender.LoadBalancingLog4jAppender
  3. log4j.appender.out2.Hosts = localhost:25430 localhost:25431
  4. log4j.appender.out2.Selector = RANDOM
  5.  
  6. # configure a class's logger to output to the flume appender
  7. log4j.logger.org.example.MyClass = DEBUG,flume
  8. #...

log4j使用「失败退避」方式的log4j.properties配置范例:

  1. #...
  2. log4j.appender.out2 = org.apache.flume.clients.log4jappender.LoadBalancingLog4jAppender
  3. log4j.appender.out2.Hosts = localhost:25430 localhost:25431 localhost:25432
  4. log4j.appender.out2.Selector = ROUND_ROBIN
  5. log4j.appender.out2.MaxBackoff = 30000 #最大的退避时长是30秒
  6.  
  7. # configure a class's logger to output to the flume appender
  8. log4j.logger.org.example.MyClass = DEBUG,flume
  9. #...

提示

这种退避机制在其他组件中有过多次应用,比如:Spooling Directory Source 中的 maxBackoff 属性的功能是一样的。