Flume的SpoolDirSource優化,自定義Deserializer
阿新 • • 發佈:2018-11-27
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,而不是按行讀取。這樣採集速度得到了較大提升。