conf文件
a1.sources = r1
a1.channels = c1
a1.sources.r1.type = TAILDIR
a1.sources.r1.filegroups = f1
a1.sources.r1.filegroups.f1 = /opt/module/1.log
a1.sources.r1.positionFile = /opt/module/taildir.json
a1.sources.r1.interceptors = i1
a1.sources.r1.interceptors.i1.type = com.lyt.gmall.flume.interceptor.ETLInterceptor$Builder
a1.channels.c1.type = org.apache.flume.channel.kafka.KafkaChannel
a1.channels.c1.kafka.bootstrap.servers = hadoop101:9092,hadoop102:9092,hadoop103:9092
a1.channels.c1.kafka.topic = topic_log
a1.channels.c1.parseAsFlumeEvent = false
a1.sources.r1.channels = c1
自定义拦截器代码
ETLInterceptor.java
package com.lyt.gmall.flume.interceptor;
import com.zkgj.gmall.flume.utils.JSONUtil;
import org.apache.flume.Context;
import org.apache.flume.Event;
import org.apache.flume.interceptor.Interceptor;
import java.nio.charset.StandardCharsets;
import java.util.Iterator;
import java.util.List;
public class ETLInterceptor implements Interceptor {
@Override
public void initialize() {
}
@Override
public Event intercept(Event event) {
byte[] body = event.getBody();
String log = new String(body, StandardCharsets.UTF_8);
if(JSONUtil.isJSONValidate(log)){
return event;
}else {
return null;
}
}
@Override
public List<Event> intercept(List<Event> list) {
Iterator<Event> iterator = list.iterator();
while (iterator.hasNext()){
Event event = iterator.next();
if (intercept(event)==null){
iterator.remove();
}
}
return list;
}
@Override
public void close() {
}
public static class Builder implements Interceptor.Builder{
@Override
public Interceptor build() {
return new ETLInterceptor();
}
@Override
public void configure(Context context) {
}
}
}
JSONUtil.java
package com.lyt.gmall.flume.utils;
import com.alibaba.fastjson.JSONObject;
public class JSONUtil {
public static boolean isJSONValidate(String log){
try {
JSONObject.parseObject(log);
return true;
} catch (Exception e) {
return false;
}
}
}