Flume拦截器

项目中自定义了:ETL拦截器(实现简单的日志过滤如时间戳不合法——长度是否是13,是不是全部都是数字,json数据不完整)、时间戳拦截器、区分类型拦截器
采用拦截器的优缺点:优点,模块化开发和可移植性;缺点,性能会比较低
自定义拦截器步骤

  1. 实现 Interceptor
  2. 重写四个方法
    a. initialize 初始化;
    b. public Event intercept(Event event) 处理单个 Event
    c. public List intercept(List events) 处理多个 Event,在这个方法中调用 Event intercept(Event event)
    d. close 方法
  3. 静态内部类,实现 Interceptor.Builder
### Flume Interceptor 功能与作用 Flume拦截器Interceptor)是在事件传输过程中用于修改或过滤事件的组件。当某个拦截器判断事件不满足特定条件时,该事件会被丢弃[^3]。 #### 修改事件属性 拦截器可以用来动态地向事件中添加元数据或其他信息。这有助于下游处理系统更好地理解和利用这些附加的信息。例如,在日志收集场景下,可以通过拦截器为每条日志记录打上时间戳标签或者地理位置标记等额外字段。 #### 过滤不符合标准的数据项 通过配置不同的逻辑规则来筛选掉那些不需要进一步处理的日志条目或者其他形式的数据流输入。比如设置正则表达式匹配模式只保留符合格式要求的内容;又或者是基于业务需求定义更复杂的判定机制去除异常情况下的脏数据。 #### 数据转换操作 除了简单的增删改查之外,还可以实现更加复杂的数据变换功能。如将原始文本消息解析成结构化的 JSON 对象以便后续存储于 NoSQL 数据库之中;亦或是执行压缩/解压算法减少网络带宽占用并提高传输效率。 ```java public class CustomInterceptor implements Interceptor { @Override public void initialize() {} @Override public Event intercept(Event event) { // Implement custom logic here to modify or filter events. String body = new String(event.getBody()); if (body.contains("error")) { // Example condition return null; // Discard this event } Map<String, String> headers = event.getHeaders(); headers.put("processed", "true"); event.setHeaders(headers); return event; } @Override public List<Event> intercept(List<Event> events) { return events.stream() .map(this::intercept) .filter(Objects::nonNull) .collect(Collectors.toList()); } @Override public void close() {} } ``` 此代码片段展示了如何创建自定义拦截器类 `CustomInterceptor` 来处理传入的每一个单独事件以及批量列表中的多个事件实例。对于每个接收到的对象都会调用一次 `intercept()` 方法来进行必要的调整工作——这里假设凡是包含字符串 `"error"` 的内容都将被舍弃不再继续传递下去,并给其余合格者增加一个新的头部键值对标识其已被成功预处理过。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值