自定义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的数据即可。
注意:
1.在配置文件里的内容可以直接在插件中获得,但是注意要插件对应。
2.在source和sink中都有事物的概念,但是source和sink的事物毫无关系,他们的事物只是保证他们各自和channel通信的事务性。