[TOC]
作者:xufc
链接:http://caoxufeng.com/post/1/
1.Event
event是flume
传输的最小对象
,从source获取数据后会先封装成event,然后将event发送到channel,sink从channel拿event消费。event由头headers和身体(body)两部分组成:Headers部分是一个map,body部分可以是String或者byte[]等。其中body部分是真正存放数据的地方,headers部分用于本节所讲的interceptor。
2.Source
自定义Source,自定义的Event需要继承PollableSource (轮训拉取)或者EventDrivenSource (事件驱动),另外还需要实现Configurable接口。
PollableSource或者EventDrivenSource的区别在于:PollableSource是通过线程不断去调用process方法,主动拉取消息,而EventDrivenSource是需要触发一个调用机制,即被动等待。 Configurable接口:便于项目中初始化某些配置用的。
Event:
event是flume
传输的最小对象
,从source获取数据后会先封装成event,然后将event发送到channel,sink从channel拿event消费。
2.1CustomSource.java
public class CustomSource extends AbstractSource implements Configurable,PollableSource{
@Override
public long getBackOffSleepIncrement() {
// TODO Auto-generated method stub
return 0;
}
@Override
public long getMaxBackOffSleepInterval() {
// TODO Auto-generated method stub
return 0;
}
@Override
public Status process() throws EventDeliveryException {
Random random = new Random();
int randomNum = random.nextInt(100);
String text = "Hello world" + random.nextInt(100);
HashMap<String, String> header = new HashMap<String,String>();
header.put("id",Integer.toString(randomNum));
this.getChannelProcessor()
.processEvent(EventBuilder.withBody(text,Charset.forName("UTF-8"),header));
return Status.READY;
}
@Override
public void configure(Context arg0) {
}
}
2.2Flume 编写配置文件:
# 指定Agent的组件名称
a1.sources = r1
a1.sinks = k1
a1.channels = c1