1.java代码
package cn.eud360.flume.source;
import org.apache.commons.io.FileUtils;
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.apache.flume.source.ExecSource;
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.Executor;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.TimeUnit;
/**
* 用来监听一个文件的source
* 特点:实时监听一个文件,只要有有新的内容产生,则收集起来
* 可以记录偏移量信息(读到哪一行),如果flume出现问题,那么重启以后,需要接着上一次的偏移量继续读取
*/
public class TailFileSource extends AbstractSource implements EventDrivenSource, Configurable {
private static final Logger logger = LoggerFactory.getLogger(ExecSource.class);
//数据从哪里来
private String filePath;
//偏移量存到那里去
private String posiPath;
//采集数据间隔时间
private Long interval;
//数据字符集
private String charset;
private FileRunner fileRunner;
private ExecutorService executor;
/**
* a1.sources.r1.type = cn.edu360.flume.source.TailFileSource
* a1.sources.r1.filePath = /root/modules/nginx-1.14.2/logs/access.log
* a1.sources.r1.posiFile = /root/modules/apache-flume-1.8.0-bin/posi.txt
* a1.sources.r1.interval = 2000
* a1.sources.r1.charset