Flume的SpoolDirSource优化,自定义Deserializer

SpoolDirSource采集数据默认是按行采集的,在官网的配置中有LINE和AVRO两种配置。AVRO尚未了解

 在采集单行数据量少的日志文件时,使用Line采集慢

查看源码后发现实现原理非常简单

直接 copy了LineDeserializer的代码将主要逻辑改为如下

private String readLine() throws IOException {
    StringBuilder sb = new StringBuilder();
    int c;
    int readChars = 0;
    while ((c = in.readChar()) != -1) {
      readChars++;


      sb.append((char)c);
     
      if (readChars >= maxCharLength) {
        break;
      }
    }

    if (readChars > 0) {
      return sb.toString();
    } else {
      return null;
    }
  }

设置每次读取的最大长度maxCharLength=10*1024,这样我的event每次都是10k,而不是按行读取。这样采集速度得到了较大提升。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值