Flume如何自定义拦截器

Flume的拦截器很简单,大致操作如下
1、导入flume的jar包
2、准备一个类实现flume提供的interceptor接口,并在其中定义一个静态内部类,实现interceptor的内部接口builder
3、Interceptor的实现类有四个方法,intercept单个event的处理,另一个intercept是处理多个event,close关闭资源、initialize初始化方法
4、Builder的实现类有两个方法,build是如何构造自己的拦截器对象、configure可以获取我们自己编写的agent文件中的配置
5、按照要求的业务逻辑编写号时候,将打好的jar包发送到流程线的第一台flume中的lib目录下,就是在哪个服务器上的flume使用这个jar就放在哪个中

下面给大家准备了一个,通过数据中的第一位数据给数据打上一个是否是数字或字母的标签

要导入的jar

	<dependencies>
        <dependency>
            <groupId>org.apache.flume</groupId>
            <artifactId>flume-ng-core</artifactId>
            <version>1.7.0</version>
        </dependency>
    </dependencies>

代码如下

package wy;

import org.apache.flume.Context;
import org.apache.flume.Event;
import org.apache.flume.interceptor.Interceptor;

import java.util.List;
import java.util.Map;

public class MyInter implements Interceptor{

    @Override
    public void initialize() {

    }

    @Override
    public Event intercept(Event event) {
		//取出event的header头数据
        Map<String, String> headers = event.getHeaders();
		//取出event的body
        byte[] body = event.getBody();
		//数据不空则处理,这一步就是考虑到意外情况
        if(headers!=null && body!=null){
			//用body的第一位数据觉得是数值还是字母
            if(body[0]>='a' && body[0]<='z' || body[0]>='A' && body[0]<='Z'){
                headers.put("type","onnumber");
            }else{
                headers.put("type","number");
            }
        }
        return event;
    }

    @Override
    public List<Event> intercept(List<Event> list) {
        for (Event event : list) {
            intercept(event);
        }
        return list;
    }

    @Override
    public void close() {

    }

    public static class MyBuilder implements Interceptor.Builder{

        @Override
        public Interceptor build() {
            return new MyInter();
        }

        @Override
        public void configure(Context context) {

        }
    }
}

如上拦截器使用时,可以使用source的分发功能判断header中的type数据,从而决定发出到不同的channel

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值