【Flume中间件】(13)自定义Source

自定义Source

有时候,flume中的source不符合我们的需求,这时就可以进行自己定义Source。

自定义Source的流程就是首先继承并实现官方类,然后实现相应的方法,重点是读取数据的方法,在该内部可以定义jdbc或者是IO流进行读取数据。

然后将数据封装成事件,交给channel处理器。

处理器的内部流程是先将该事件交给拦截器进行处理(封装头部信息等),然后判断是否为空,不为空,将其将给选择器,将该事件交给自己对应的channel。

自定义的Source类型为自己编写的代码的全类名。

注意要将写好的代码打成jar包丢到flume的lib目录下。

a1.sources = r1
a1.sinks = k1
a1.channels = c1

a1.sources.r1.type = com.atguigu.Source.MySource
a1.sources.r1.prefix=log
a1.sources.r1.suffix=mod

a1.sinks.k1.type = logger

a1.channels.c1.type = memory
a1.channels.c1.capacity = 1000
a1.channels.c1.transactionCapacity = 100

a1.sources.r1.channels = c1
a1.sinks.k1.channel = c1
package com.atguigu.Source;

import org.apache.flume.Context;
import org.apache.flume.EventDeliveryException;
import org.apache.flume.PollableSource;
import org.apache.flume.conf.Configurable;
import org.apache.flume.event.SimpleEvent;
import org.apache.flume.source.AbstractSource;

public class MySource extends AbstractSource implements Configurable, PollableSource {

    // 定义键值对
    String prefix;
    String suffix;

    // 根据上下文获取flume中配置的值
    @Override
    public void configure(Context context) {
        prefix = context.getString("prefix");
        suffix = context.getString("suffix", ".www");
    }

    @Override
    public Status process() throws EventDeliveryException {
        Status status = null;

        // 读取数据,可以自定义jdbc或IO流
        try {
            for (int i = 0; i < 10; i++) {
                SimpleEvent event = new SimpleEvent();
                event.setBody((prefix + "-->" + i + suffix).getBytes());

                // 将事件交给处理器
                getChannelProcessor().processEvent(event);

                // 设置提交状态
                status = Status.READY;
            }
        } catch (Exception e) {
            e.printStackTrace();
            status = Status.BACKOFF;
        }

        // 定义延时,也可以设置成配置参数
        try {
            Thread.sleep(2000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        return status;
    }

    @Override
    public long getBackOffSleepIncrement() {
        return 0;
    }

    @Override
    public long getMaxBackOffSleepInterval() {
        return 0;
    }

}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

海洋 之心

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值