当前位置: 首页 > news >正文

flume自定义拦截器

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

下面看一下源码中时间戳的拦截器

public class TimestampInterceptor implements Interceptor {

  private final boolean preserveExisting;

  /**
   * Only {@link TimestampInterceptor.Builder} can build me
   */
  private TimestampInterceptor(boolean preserveExisting) {
    this.preserveExisting = preserveExisting;
  }

  @Override
  public void initialize() {
    // no-op
  }

  /**
   * Modifies events in-place.
    *这个是对单个事件的处理
   */
  @Override
  public Event intercept(Event event) {
//获得事件中的所有头信息,都是以key-value的形式存储
    Map<String, String> headers = event.getHeaders();
    if (preserveExisting && headers.containsKey(TIMESTAMP)) {
      // we must preserve the existing timestamp
    } else {
      long now = System.currentTimeMillis();
    //把时间戳放到头信息
      headers.put(TIMESTAMP, Long.toString(now));
    }
    return event;
  }

  /**
   * Delegates to {@link #intercept(Event)} in a loop.
   * @param events
    *这是对多个事件的处理
   * @return
   */
  @Override
  public List<Event> intercept(List<Event> events) {
    for (Event event : events) {
      intercept(event);
    }
    return events;
  }

  @Override
  public void close() {
    // no-op
  }

  /**
   * Builder which builds new instances of the TimestampInterceptor.
    *这个方法是必须实现的,这个接口Interceptor中注释明确必须实现
   */
  public static class Builder implements Interceptor.Builder {

    private boolean preserveExisting = PRESERVE_DFLT;

    @Override
    public Interceptor build() {
      return new TimestampInterceptor(preserveExisting);
    }

    @Override
    public void configure(Context context) {
      preserveExisting = context.getBoolean(PRESERVE, PRESERVE_DFLT);
    }

  }

  public static class Constants {
    public static String TIMESTAMP = "timestamp";
    public static String PRESERVE = "preserveExisting";
    public static boolean PRESERVE_DFLT = false;
  }

}

大家可以写自己的过滤器,特别对于log4j的日志处理,例如如果你的日志每一个小时生成一个文件,但是我要把它按照天来存储,大家可以按照这个这种形式实现. 把生成的包放到/app/apache-flume-1.7.0-bin/plugins.d/interceptor/lib下,如果/plugins.d不存在,自己就建立这个目录就可以. 在配置文件中添加:xxx.sources.r1.interceptors.i1.type = com.hc360.interceptor.DateTimeSuffixInterceptor$Builder就可以。 现在想把自己做的一些东西记录一下,坚持,坚持。。。。。。。。。。。。。。

转载于:https://my.oschina.net/u/238361/blog/1023560

相关文章:

  • [sqoop] sqoop 小试牛刀
  • linux select函数详解【转】
  • 前端优化的技巧
  • Android view的测量及绘制
  • inspect a service on the swarm
  • HDU 1176
  • Lintcode---线段树查询(区间最大值)
  • C++加载位图跟SOCKET通信的编写
  • 踩到Framework7 Photo Browser 的一个坑
  • ZOJ 1649 Rescue(有敌人迷宫BFS)
  • linux平台从源码安装git【转】
  • java中super的作用
  • css 选择符中的 ,+,~,=,^,$,*,|,:,空格 的意思
  • android Settings 解析
  • 【转】HTML !--...-- 注释 、CSS/JS //注释 和 /*.....*/ 注释
  • 【391天】每日项目总结系列128(2018.03.03)
  • CentOS学习笔记 - 12. Nginx搭建Centos7.5远程repo
  • ES学习笔记(12)--Symbol
  • JavaScript/HTML5图表开发工具JavaScript Charts v3.19.6发布【附下载】
  • JavaScript的使用你知道几种?(上)
  • Linux Process Manage
  • MySQL QA
  • MySQL的数据类型
  • PAT A1017 优先队列
  • React16时代,该用什么姿势写 React ?
  • Vue学习第二天
  • 给第三方使用接口的 URL 签名实现
  • 给自己的博客网站加上酷炫的初音未来音乐游戏?
  • 解析带emoji和链接的聊天系统消息
  • 每天10道Java面试题,跟我走,offer有!
  • 深度学习入门:10门免费线上课程推荐
  • 使用putty远程连接linux
  • 正则表达式小结
  • ​业务双活的数据切换思路设计(下)
  • (C语言)二分查找 超详细
  • (el-Transfer)操作(不使用 ts):Element-plus 中 Select 组件动态设置 options 值需求的解决过程
  • (二)springcloud实战之config配置中心
  • (附源码)springboot青少年公共卫生教育平台 毕业设计 643214
  • (论文阅读40-45)图像描述1
  • (十二)devops持续集成开发——jenkins的全局工具配置之sonar qube环境安装及配置
  • (数据结构)顺序表的定义
  • (轉貼)《OOD启思录》:61条面向对象设计的经验原则 (OO)
  • (总结)Linux下的暴力密码在线破解工具Hydra详解
  • .htaccess配置常用技巧
  • .net Application的目录
  • .Net core 6.0 升8.0
  • .net 验证控件和javaScript的冲突问题
  • .NET(C#、VB)APP开发——Smobiler平台控件介绍:Bluetooth组件
  • .NET委托:一个关于C#的睡前故事
  • .net项目IIS、VS 附加进程调试
  • .Net转Java自学之路—基础巩固篇十三(集合)
  • .project文件
  • @Resource和@Autowired的区别
  • @test注解_Spring 自定义注解你了解过吗?
  • @Validated和@Valid校验参数区别