提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
在一系列多路+拦截器的项目中,通常需要我们自定义flume拦截器
我们介绍一下如何自定义flume拦截器
二、具体步骤
1.自定义flume拦截器 实现框架提供的拦截器接口Interceptor
实现接口内部的方法
//初始化方法 先被执行 无参数校验工作 按照业务逻辑需求
public void initialize()
//处理单个event逻辑方法
public Event intercept(Event event)
//方法的重载 批量处理多个event事件方法
public List<Event> intercept(List<Event> list)
//关闭资源 完成一些收尾工作
public void close()
(1) 实现public void initialize()方法
在该案例业务逻辑中无特殊要求,即可省略
(2)实现public Event interceptor(Event event)
注意 headers中的key 和value 要和配置文件中的配置信息 相应名称相同
代码中是简单的拦截 数据中含有“男”的 title标记为nan;数据中含有“女”的 title标记为女;
其他的数据 title标记为other
public Event intercept(Event event) {
//获取headers
Map<String, String> headers = event.getHeaders();
//获取数据
byte[] body = event.getBody();
String data = new String(body);
if(data.contains("男")){
headers.put("title","nan");
}else if(data.contains("女")){
headers.put("title","nv");
}else {
headers.put("title","other");
}
return null;
}
相应配置文件信息:
#channel selector a1.sources.r1.selector.type = multiplexing a1.sources.r1.selector.header = title a1.sources.r1.selector.mapping.nan = c1 a1.sources.r1.selector.mapping.nv = c2 a1.sources.r1.selector.mapping.other = c3
注意配置文件中配置信息与代码相对应!!!
(3)实现public List<Event> intercept(List<Event> list)方法
批量处理多个event事件方法,遍历调用public Event interceptor(Event event)方法
public List<Event> intercept(List<Event> list) {
//遍历
for(Event event : list){
intercept(event);
}
return null;
}
2.实现拦截器的构建器 实现Builder接口中的方法
注意改类名一定要和配置文件中配置信息相对应
//实现拦截器的构建器
public static class MyBuilder implements Builder{
//构建拦截器的实例化方法
@Override
public Interceptor build() {
return new MyInterceptor();
}
//执行拦截器过程中,可以对配置信息进行一系列操作
@Override
public void configure(Context context) {
//该项目中无需此操作,可省略,按照项目需求写
}
}
}
总结
上述为自定义flume拦截器的方法