package com.meme.flume.interceptor;
import com.google.common.base.Charsets;
import org.apache.flume.Context;
import org.apache.flume.Event;
import org.apache.flume.interceptor.Interceptor;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.util.List;
import java.util.UUID;
/**
* Created by root on 7/3/18.
*/
public class MyInterceptor implements Interceptor {
private static final Logger logger = LoggerFactory
.getLogger(MyInterceptor.class);
public MyInterceptor(){
}
@Override
public void initialize() {
}
@Override 可以在该方法里写自己拦截器的逻辑 我这里就只添加了UUID
public Event intercept(Event event) {
try{
String body = new String(event.getBody(), Charsets.UTF_8);
StringBuffer bodyoutput = new StringBuffer();
bodyoutput.append(body+","+ UUID.randomUUID());
event.setBody(bodyoutput.toString().getBytes());
}catch (Exception e){
logger.error("interceptor failure");
}
return event;
}
@Override
public List<Event> intercept(List<Event> list) {
for (Event event : list) {
intercept(event);
}
return list;
}
@Override
public void close() {
}//Builder类中实例化interceptor
public static class Builder implements Interceptor.Builder {
//使用Builder初始化Interceptor
@Override
public Interceptor build() {
return new MyInterceptor();
}
@Override
public void configure(Context context) {
}
}
public static void main(String[] args) {
System.out.println("ok");
}
}
然后打包放到flume的lib目录里就可以
自定义的maven依赖
<dependency>
<groupId>org.apache.flume</groupId>
<artifactId>flume-ng-core</artifactId>
<version>1.7.0</version>
</dependency>
拦截器的配置:
agent.sources.r1.interceptors = i1
agent.sources.r1.interceptors.i1.type = com.meme.flume.interceptor.MyInterceptor$Builder