Flume Custom HTTPSourceHandler GZipped文件

时间:2015-11-11 00:06:49

标签: java flume flume-ng

我正在尝试创建一个自定义Flume HTTPSourceHandler来处理在HTTP请求的POST正文中发送的文件的内容,并且该帖子的有效负载将被gzip压缩。

我是Flume的新手,并努力了解如何将此GZip文件(或任何数据)的内容作为Flume事件返回。

以下是我正在处理的一些不完整的代码。现在的主要目标是简单地将文件控制台打印到控制台。

任何提示,示例等都会非常有用。

import org.apache.flume.Event;
import org.apache.flume.source.http.HTTPSourceHandler;
import org.apache.http.HttpHeaders;

import javax.servlet.http.HttpServletRequest;
import java.util.ArrayList;
import java.util.List;
import java.util.zip.GZIPInputStream;

public class HttpGzipHandler extends HTTPSourceHandler{

    public HttpGzipHandler(){

    }

    public List<Event> getEvents(HttpServletRequest request) throws Exception {
        boolean isGzipped = request.getHeader(HttpHeaders.CONTENT_ENCODING) != null
                && request.getHeader(HttpHeaders.CONTENT_ENCODING).contains("gzip");
        GZIPInputStream gzipInputStream = new GZIPInputStream(request.getInputStream());

        List<Event> eventList = new ArrayList<Event>(0);


        //TODO: Return the Events
    }

}

1 个答案:

答案 0 :(得分:0)

您可以查看custom Http handler我为一款名为Cygnus的工具开发的灵感。我认为对你来说重要的部分是创建和发布事件的代码:

// create the appropiate headers
Map<String, String> eventHeaders = new HashMap<String, String>();
eventHeaders.put(..., ...);

// create the event list containing only one event
ArrayList<Event> eventList = new ArrayList<Event>();
Event event = EventBuilder.withBody(data.getBytes(), eventHeaders);
eventList.add(event);

return eventList;