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,而不是按行读取。这样采集速度得到了较大提升。

猜你喜欢

转载自blog.csdn.net/qq_40026968/article/details/83788779