flume自定义拦截器
flume自带拦截器
- timestamp 拦截器:在Event Header中添加时间戳。
- Host 拦截器:在Event Header中添加agent运行机器的Host或IP。
- Static 拦截器:在Event Header中添加自定义静态属性。
- Remove Header拦截器:可移除Event Header中指定属性。
- UUID拦截器:在Event Header中添加全局唯一UUID。
- Search and Replace拦截器:基于正则搜索和替换字符串等。
- Regex Filtering拦截器:基于正则过滤或反向过滤Event。
- Regex Extractor拦截器:基于正则在Event Header添加指定的Key,并将匹配到的内容作为对应的Value。
当以上flume自带拦截去不能实现复杂需求时,可以考虑自定义拦截器
flume自定义拦截器
整体流程:
- 编写java代码
- 打包上传到flume的lib目录下
- 编写flume配置文件
flume Interceptor源码
-
public void initialize()运行前的初始化,一般不需要实现
-
public Event intercept(Event event)处理单个event;
-
public List intercept(List events)批量处理event,内部调用单个的event逻辑即可;
-
public void close()可以做一些清理工作,可以不实现
-
public interface Builder extends Configurable 构建Interceptor对象,外部使用这个Builder来获取Interceptor对象。
综上所述,实现Interceptor
,自定义flume拦截器主要实现以下3个方法、接口
- 实现Interceptor接口中
intercept(Event event)
方法 intercept(List<Event> events)
方法。- 创建内部类Builder实现
Interceptor
.Builder接口
示例
需求:实现过滤某个不需要的字段,并加密另外一个字段
原始数据格式
# 加密 |不处理|不处理|过滤|不处理
13504245101,male,11,chifan,bei
13717457125,female,22,shuijue,shang
18451762413,male,33,dadoudou,guang
处理后的数据
xxxxxxxxxxx,male,11,bei
xxxxxxxxxxx,female,22,shang
xxxxxxxxxxx,male,33,guang
第一个flume代码(自定义flume拦截器)
pom文件
<dependencies>
<dependency>
<groupId>org.apache.flume</groupId>
<artifactId>flume-ng-core</artifactId>
<version>1.6.0-cdh5.14.2</version>
</dependency