RpcClient
package org.apache.flume.api;
import java.util.List;
import org.apache.flume.Event;
import org.apache.flume.EventDeliveryException;
import org.apache.flume.FlumeException;
public interface RpcClient {
public int getBatchSize();
public void append(Event event) throws EventDeliveryException;
public void appendBatch(List<Event> events) throws
EventDeliveryException;
public boolean isActive();
public void close() throws FlumeException;
}
RpcClient接口十分简单,其通过调用appendBatch 或者 append方法发送Event到Flume Agent。如果方法成功返回,意味着成功将事件写入目的地。反之将会抛出EventDeliveryException异常,Rpc客户端可以根基自己的异常处理规则进行回滚或者重试。
在执行每个RPC调用之前,通过调用isActive来确认RPC客户端是否仍然活跃。一旦不需要RPC客户端或者返回false,必须通过close方法来关闭RPC客户端,以释放资源,避免资源泄露。
RpcClient客户端公共参数
参数 | 默认值 | 描述 |
client.type | - | 该参数值必须为default,default_loadbalance,default_failover或thrift |
batch-size | 100 | 每个批量发送事件的最大数量 如果传入的数量大于批次数量,RPC客户端将把列表分批顺次写出,只有当所有成功写出,才会返回。如果有一个批次失败就会抛出异常。如果一些批次失败而另一些批次成功,应用程序重试的时候就会导致数据重复,故最好的是传入小于等于批次数量的事件列表 |
hosts | - | 可以用来指定主机参数的名字列表 |
hosts.<hostalis> | - | 已hostname:port格式的主机配置 |
示例:
这里以Avro 客户端为例
properties 文件
client.type = default
batch-size = 100
hosts = h1
hosts.h1 = 192.168.0.7:58085
测试代码
package com.flumeTest.handler;
import java.nio.charset.Charset;
import java.util.Properties;
import org.apache.flume.api.RpcClient;
import org.apache.flume.api.RpcClientFactory;
import org.apache.flume.event.EventBuilder;
public class RpcDefaultClient {
public static void main(String[] args) throws Exception {
Properties properties = new Properties();
properties.load(RpcDefaultClient.class.getClassLoader().getResourceAsStream("client.properties"));
RpcClient c = RpcClientFactory.getInstance(properties);
c.append(EventBuilder.withBody("test again 01", Charset.forName("UTF-8")));
c.close();
}
}
测试输出:
2016-03-01 13:48:40,118 (SinkRunner-PollingRunner-DefaultSinkProcessor) [INFO - org.apache.flume.sink.LoggerSink.process(LoggerSink.java:94)] Event: { headers:{} body: 74 65 73 74 20 61 67 61 69 6E 20 30 31 test again 01 }