背景
在使用docker 容器搭建nginx + flume + kafka的日志收集平台时,使用lua提取http request中的header和body,输出json时会有 “\x22”字符存在, 在flume.source.command中加入tail -f access.log | sed ‘s/\\x22/\\”/g’ 时总会有延时的感觉。
尝试方法
1: 各种batchSize和timeOut, 没有用
2: 设置中间文件,均无用
解决方法
原因是由于shell命令的缓冲区造成的, 可以使用stdbuf 关闭。具体方法如下:
1. 构造tail_sed.sh, 文件内容如下: stdbuf –input=0 –output=0 tail -F —disable-inotify /xxx/xxx/…/access.log | stdbuf –input =0 –output=0 sed ‘s/\\x22/\\”/g’
2. flume source配置 t2k.sources.s1.command=/bin/sh -c /xxx/xxx/…/tail_sed.sh
这里应该就可以欢快的跑起来了,祝好