flume插件开发,自定义source,sink

自定义source开发。

1.如果使用第一种,你可以在start方法中启动额外的线程,不断的往channel中发数据。

2.如果使用第二种,你可以在process()实现你不断重发的梦想。

在flume-ng里面开发一个source需要遵循一定的规则,我们可以通过以下两种方法来开发自己的source:

package org.apache.flume;

import org.apache.flume.conf.Configurable;
import org.apache.flume.source.AbstractSource;

/**
 * User: wyp
 * http://www.iteblog.com/archives/1034
 * 版权所有,翻版不究
 * 过往记忆博客,专注于hadoop、hive、spark、shark、flume的技术博客,大量的干活
 * Date: 14-5-20
 * Time: 下午11:15
 */
public class TailSource extends AbstractSource implements EventDrivenSource,
        Configurable {
    @Override
    public void configure(Context context) {

    }

    @Override
    public synchronized void start() {

    }

    @Override
    public synchronized void stop() {

    }
}

或者

package org.apache.flume;

import org.apache.flume.conf.Configurable;
import org.apache.flume.source.AbstractSource;

/**
 * User: wyp
 * http://www.iteblog.com/archives/1034
 * 版权所有,翻版不究
 * 过往记忆博客,专注于hadoop、hive、spark、shark、flume的技术博客,大量的干活
 * Date: 14-5-20
 * Time: 下午11:15
 */
public class TailSource extends AbstractSource implements Configurable, 
                                PollableSource {
    @Override
    public void configure(Context context) {

    }

    @Override
    public Status process() throws EventDeliveryException {
        return null;
    }

    @Override
    public synchronized void start() {

    }

    @Override
    public synchronized void stop() {

    }
}

这两个类虽然继承关系不一样,但是都可以实现。下面的方法中多了一个process()方法,这个方法在PollableSourceRunner类中会被一个线程不断的调用。

参考:基于flume-ng 1.4.0的TailSource程序开发

自定义sink开发

public class MyTestSink extends AbstractSink implements Configurable {
  private static final Logger log = LoggerFactory.getLogger(AbstractSink.class);
  Context c;
  @Override
  public void configure(Context arg0) {
    this.c = arg0;
  }
  // 不断循环调用
  @Override
  public Status process() throws EventDeliveryException {
    return Status.READY;
  }
  // 在整个sink开始时执行一遍
  @Override
  public synchronized void start() {
    log.info("Start Method…………………………");
    super.start();
  }
  // 在整个sink结束时执行一遍
  @Override
  public synchronized void stop() {
    log.info("Stop Method…………………………");
    super.stop();
  }
}

 process会不断调用,你只需在process中去取channel的数据即可。

参考:Flume(ng) 自定义sink实现和属性注入

注意:

1.在配置文件里的内容可以直接在插件中获得,但是注意要插件对应。

2.在source和sink中都有事物的概念,但是source和sink的事物毫无关系,他们的事物只是保证他们各自和channel通信的事务性。

你可能感兴趣的:(flume插件开发,自定义source,sink)