pos值是根据inode和file的值共同决定,有一个改了,就会变动
log4j因为会对文件进行更名操作,例如hive.log,一旦更名就会改变inode位置,TAILDIR又会进行监控,然后上传了,就会导致重复上传。有两种解决方式
1.可以和后台商量,把log4j更换成logback框架
2.自己修改源码,先下载到flume的源码,打开flume-ng-sources文件,idea打开flume-taildir-source项目
修改源码步骤如下:
1)修改flume-taildir-source中的ReliableTaildirEventReader类中的updateTailFiles方法
注释了的是源码,修改成tf=null即可
2)修改TailFile类里面的updataPos方法
注释的是源码改成this.inode==inode即可。
打包替换掉flume/lib下的flume-taildir-source就好了,再重新启动监控项目就好了。