Taildir Source适合用于监听多个实时追加的文件,并且能够实现断点续传
一.上传成功的文件修改后任可以检测到再续传
二.源码中实现是否重新上传是由inode和file名共同决定,只要其中有一个变化就会重新上传,比如hive日志中每一天都会新生成一个hive.log,而前一天的hive.log会加上日期后缀,文件名会更改,这样导致flume重新采集上传,出现冗余
如果采用只监控hive.log,不管后缀,不会有更名影响产生冗余,但是
inode肯定会变化,如果前一天晚上任务挂点,到了第二天看到,那么任务挂掉这段期间的数据就丢失了,因为每天新生成一个hive.log被监控,前一天的会更名,数据不会被采集了,导致数据丢失。这样一来就无法发挥出taildir断点续传的优点。
常见的两种解决方案:
1.不要用会产生更名的打印日志框架,比如用logback来打印日志,它在当天生成时自带日期后缀,不会更名
2.更改源码
1).找到flume-taildir-source源码包
2).用Idea打开找到TailFile.java文件, 把更新条件换成只看inode
if(this.inode==inode&&this.path.equals(path)) 中的后半部分去掉,只判断inode
3).找到ReliableTaildirEventReader.java文件, 把读取条件做更改,只判断inode是否为新的,原来还有判断文件绝对路径
if(tf==null||!tf.getPath().equals(f.getAbsolutePath())) 后半部分删掉改为if(tf==null)(判断是否为空文件,即判断inode是否新的)
4).修改完后保存,打包
4.1在右侧maven下点package
4.2 等待完成,在左侧项目目录下找到生成的flume-taildir-source-1.9.0.jar
5).进入linux安装flume包下找到lib文件把刚才生成的jar包传过来替换原来的,这里可以对原来的jar移动到别处,以便再用
cd /export/server/flume-1.9.0/lib
6).重新启动flume
测试之后发现,再次对文件更名之后,不会再重传,但是更名后,往更名过的文件追加数据会监控到并上传最新追加的数据
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)