Flume版本 1.9.0
场景:test文件夹下有目录dir_a,dir_b,以及文件c.log;目录dir_a下又有子目录dir_a_1和文件a_01.log,目录dir_a_1下又可能有子目录和子文件......
需求:监控test目录下所有递归子目录及子文件变化。
flume官方没有提供 满足需求的Source,可以考虑两种方式:
-
①自定义Source
-
②在已有的Source基础上修改源码进行功能拓展
1.下载flume源码包
https://github.com/apache/flume.git
2.材料选择:TaildirSource
TairdirSource支持正则匹配监控父目录下的多个子项目,同时内部维护了offset支持断点续传的功能
3.分析源码
TaildirSource.java
public synchronized void start() {
logger.info("{} TaildirSource source starting with directory: {}", getName(), filePaths);
try {
reader = new ReliableTaildirEventReader.Builder()
.filePaths(filePaths)
.headerTable(headerTable)
.positionFilePath(positionFilePath)
.skipToEnd(skipToEnd)
.addByteOffset(byteOffsetHeader)
.cachePatternMatching(cachePatternMatching)
.annotateFileName(fileHeader)
.fi