Flume自定义Source、Sink和Interceptor(简单功能实现)

[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  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值