用java实现一个自定义拦截器

将上述图片的性别男设置为1,女设置为0,其他默认为2
java自定义拦截器
pom:添加flume-ng-core依赖

CustomInterceptor类:
import org.apache.flume.Context;
import org.apache.flume.Event;
import org.apache.flume.interceptor.Interceptor;
import java.util.List;
public class CustomInterceptor implements Interceptor {
@Override
public void initialize() {
}
@Override
public Event intercept(Event event) {
byte[] body = event.getBody();
String line = new String(body); // 1,张三,男,40
String[] sps = line.split(",");
switch (sps[2]) {
case "男":
sps[2] = "1";
break;
case "女":
sps[2] = "0";
break;
default:
sps[2] = "2";
}
String newStr = sps[0]+","+sps[1]+","+sps[2]+","+sps[3];
event.setBody(newStr.getBytes());
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 Builder implements Interceptor.Builder {
@Override
public Interceptor build() {
return new CustomInterceptor();
}
@Override
public void configure(Context context) {
}
}
}
打包
打jar包,放入flume的lib里面 /opt/soft/flume160/lib
运行
编辑conf配置
a4.channels=c4
a4.sources=s4
a4.sinks=k4
a4.sources.s4.type=spooldir
a4.sources.s4.spoolDir=/opt/datas
a4.sources.s4.interceptors=myinterc
a4.sources.s4.interceptors.myinterc.type=com.njbdqn.myinterceptors.CustomInterceptor$Builder
a4.channels.c4.type=memory
a4.sinks.k4.type=logger
a4.sinks.k4.channel=c4
a4.sources.s4.channels=c4
kkk.txt放入datas目录下
结果
flume-ng agent -n a4 -c conf -f /opt/flumeconf/conf_0806_custconf.properties -Dflume.root.logger=INFO,console

本文介绍如何使用Java实现自定义的Flume拦截器,用于处理数据流中的性别字段,将“男”替换为“1”,“女”替换为“0”,其他默认为“2”。文章详细展示了CustomInterceptor类的编写,包括初始化、事件拦截、列表拦截及关闭方法。并通过实例演示了如何在Flume配置中应用此自定义拦截器。
6330

被折叠的 条评论
为什么被折叠?



