【Flume 中Taildir Source问题与解决方案】

【Flume 中Taildir Source问题与解决方案】,第1张

【Flume 中Taildir Source问题与解决方案】

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

测试之后发现,再次对文件更名之后,不会再重传,但是更名后,往更名过的文件追加数据会监控到并上传最新追加的数据

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5611143.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-15
下一篇 2022-12-15

发表评论

登录后才能评论

评论列表(0条)

保存