实时监控多个文件实现断点续传
我们之前使用的是exec进行监控一个文件是否有追加数据,这时候会面临问题就是一旦该机器宕机,那么该阶段的数据就会丢失,也不是丢失,就是如果flume停止了,但是此时数据还在进行追加,因为tail -F是读取文件的最后10行,那么之前的数据就会没有读取到,但是更改tail 的参数让flume从头读,这样是不会丢失数据,但是会产生重复数据。
所以有一种解决办法就是我们监控的同时记录下当前读取文件的位置信息,并把它保存到磁盘,这样flume任务再次开启时,就会读取该json文件,继续上一次读取的位置。
a1.sources = r1 a1.sinks = k1 a1.channels = c1 a1.sources.r1.type = taildir # 文件读取位置信息路径 a1.sources.r1.positionFile = /opt/module/flume/position/position.json # 配置两个组,分别监听两个文件 a1.sources.r1.filegroups = f1 f2 a1.sources.r1.filegroups.f1 = /home/hadoop/data3/file1 a1.sources.r1.filegroups.f2 = /home/hadoop/data3/file2 a1.sinks.k1.type = logger a1.channels.c1.type = memory a1.channels.c1.capacity = 1000 a1.channels.c1.transactionCapacity = 100 a1.sources.r1.channels = c1 a1.sinks.k1.channel = c1
我们可以看到能够同时监听两个文件的追加数据。
我们还可以采用正则来进行匹配多个文件。
a1.sources.r1.type = taildir a1.sources.r1.channels = c1 a1.sources.r1.positionFile = /opt/module/flume/position/position.json a1.sources.r1.filegroups = f1 a1.sources.r1.filegroups.f1 = /home/hadoop/data3/.*.txt
上面配置的意思就是监听data3下所有以.txt结尾的文件。