问题描述:
在数仓项目中,使用Flume的TairDir Source监控日志文件,当文件更名之后会重新读取该文件造成重复
原因分析:
因为Flume的TairDir Souce是通过inode和file来唯一确定一个文件的,当文件的名称改变之后,就会重新读取这个文件,造成读取数据的重复。
解决方案:
方案一:
使用不更名打印日志框架(logback),每天会新生成一个日志文件,文件后面会加上当天的日期信息,所以不会重复,例如file.log.2022-04-07…
方案二:
修改源码,让TairDir Source判断文件时只看iNode的值
修改\apache-flume-1.7.0-src\flume-ng-sources\flume-taildir-source\src\main\java\org\apache\flume\source\taildir\ReliableTaildirEventReader.java Method:loadPositionFile
路径下的 Method:loadPositionFile
方法:
以及Method:updateTailFiles
方法:
然后重新打包,上传到Flume里。