1、需求
使用Flume采集服务器本地日志,需要按照日志类型的不同,将不同种类的日志发往不同的分析系统。
2、需求分析
- 在实际的开发中,一台服务器产生的日志类型可能有很多种,不同类型的日志可能需要发送到不同的分析系统。此时会用到Flume拓扑结构中的Multiplexing结构,Multiplexing的原理是,根据event中Header的某个key的值,将不同的event发送到不同的Channel中,所以我们需要自定义一个Interceptor,为不同类型的event的Header中的key赋予不同的值。
- 在该案例中,我们以端口数据模拟日志,以包含hadoop的数据和包含hive的数据模拟不同类型的日志,我们需要自定义interceptor区分hive和hadoop,将其分别发往不同的分析系统(Channel)。
3、自定义interceptor
3.1、创建一个maven项目,并引入以下依赖。
<dependency>
<groupId>org.apache.flume</groupId>
<artifactId>flume-ng-core</artifactId>
<version>1.7.0</version>
</dependency>
3.2、定义CustomInterceptor类并实现Interceptor接口。
import org.apache.flume.Context;
import org.apache.flume.Event;
import org.apache.flume.interceptor.Interceptor;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
/* 自定义flume 拦截器 */
public class CustomInterceptor implements Interceptor {
/* 设置事件集集合 */
private List<Event> events;
/* 初始化 */
@Override
public void initialize() {
events = new ArrayList<>();
}