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