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

本文介绍如何在Flume中自定义Source和Sink组件。通过具体代码示例,详细展示了两种自定义Source的方法及自定义Sink的实现过程。此外还提到了配置文件的应用及事务处理的概念。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

自定义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通信的事务性。

转载于:https://my.oschina.net/cjun/blog/512037

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值