1.我们知道使用Flume实时监控日志文件,可以使用tail -F 文件地址,但是使用tail -F 会有一个问题 当日志滚动添加至一个文件的时 突然Flume出现异常导致Flume服务挂掉此时日志文件还在不停的滚动而Flume如果想要收集数据就得重启服务但是重启后的Flume会将目标文件重头开始数据收集,此时就会出现数据重复被收集!那么有没有我们自己去管理文件的数据偏移量呢?避免出现服务重启带来的数据重复收集呢?答案是可以的~
2.此时我们可以自定义Source来管理我们的文件数据偏移量
添加pom.xml
org.apache.flume
flume-ng-core
1.6.0
3.创建我们的自定义类
image.png
package com.atguigu.gmall.flume.source;
import com.google.gson.Gson;
import org.apache.commons.io.FileUtils;
import org.apache.commons.lang.StringUtils;
import org.apache.flume.Context;
import org.apache.flume.Event;
import org.apache.flume.EventDrivenSource;
import org.apache.flume.channel.ChannelProcessor;
import org.apache.flume.conf.Configurable;
import org.apache.flume.event.EventBuilder;
import org.apache.flume.source.AbstractSource;
import org.mortbay.util.ajax.JSON;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.File;
import java.io.IOException;
import java.io.RandomAccessFile;
import java.nio.charset.Charset;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.TimeUnit;