1. 程式人生 > >Flume的SpoolDirSource優化,自定義Deserializer

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,而不是按行讀取。這樣採集速度得到了較大提升。