flume高并发优化——(6)开发多文件检索source插件

为解决`tail -f /export/home/tomcat/logs/*/*.log`无法录入数据的问题,本文介绍了开发一个自定义的Flume Source插件,该插件能检测文件夹下所有文件并使用多线程读取每个文件内容,将数据送入Channel,从而实现高并发数据采集。该方法增强了系统的可控性和降低了依赖风险。
摘要由CSDN通过智能技术生成

        最近遇到一个问题,就是我们在exec的命令行中输入 “tail -f  /export/home/tomcat/logs/*/*.log” ,没有任何数据录入,为了解决这个问题,我们自己开发了一个flume数据接收端,主要实现的功能是通过检测一个问价夹下所有文件,通过多线程将每个文件通过tail 命令读取到channel中。


1,实现思路

                                          



2,flume规则

自定义flume source结构

public class SourceName extends AbstractSource implements EventDrivenSource,
        Configurable {
		
	// 获取配置
    @Override
    public void configure(Context context) {
 
    }
 
	//开始收集数据
    @Override
    public synchronized void start() {
 
    }
 
	//结束收集数据
    @Override
    public synchronized void stop() {
 
    }
}

或者

public class SourceName extends AbstractSource implements Configurable, 
                                PollableSource {
		
	// 获取配置
    @Override
    public void configure(Context context)throws EventDeliveryException {
		return null;
    }
 
	//开始收集数据
    @Override
    public synchronized void start() {
 
    }
 
	//结束收集数据
    @Override
    public synchronized void stop() {
 
    }
}



自定义fluem sink结构

public class SinkName extends AbstractSink implements Configurable {
  private static final Logger log = LoggerFactory.getLogger(AbstractSink.class);
  Context c;
  
  @Override
  public void configure(Context arg0) {
    this.c = arg0;
  }
  
  //循环调用输出数据
  @Override
  public Status process() throws EventDeliveryException {
    return Status.READY;
  }
  
  //输出流开始(调用一次)
  @Override
  public synchronized void start() {
    super.start();
  }
  
  //输出流结束(调用一次)
  @Override
  public synchronized void stop() {
    super.stop();
  }
}


3,实现

/*
 * 作者:许恕
 * 时间:2016年5月3日
 * 功能:实现tail 某目录下的所有符合正则条件的文件
 * Email:xvshu1@163.com
 * To detect all files in a folder
 */

package org.apache.flume.source;

import com.google.common.base.Preconditions;
import com.google.common.util.concurrent.ThreadFactoryBuilder;
import org.apache.flume.Context;
import org.apache.flume.Event;
import org.apache.flume.EventDrivenSource;
import org.apache.flume.SystemClock;
import org.apache.flume.channel.ChannelProcessor;
import org.apache.flume.conf.Configurable;
import org.apache.flume.event.EventBuilder;
import org.apache.flume.instrumentation.SourceCounter;
import org.apache.flume.tools.HostUtils;
import org.mortbay.util.ajax.JSON;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.io.BufferedReader;
import java.io.File;
import java.io.IOException;
import java.io.InputStreamReader;
import java.nio.charset.Charset;
import java.util.*;
import java.util.concurrent.*;
import java.util.regex.Matcher;
im
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值