1)Flume组成
Flume是由source、channel、sink组成。
开发中经常用到的组件:
Taildir Source:断点续传、多目录。Flume1.6以前需要自己自定义Source记录每次读取文件位置,实现断点续传。
File Channel:数据存储在磁盘,但是传输速率慢。适合对数据传输可靠性要求高的场景,比如,金融行业。
Memory Channel:数据存储在内存中,传输速率快。适合对数据传输可靠性要求不高的场景,比如,普通的日志数据。
Kafka Channel:减少了Flume的Sink阶段,提高了传输效率。
2)Flume拦截器
自定义拦截器步骤:
a)实现 Interceptor
b)重写四个方法
initialize 初始化
public Event intercept(Event event) 处理单个Event
public List<Event> intercept(List<Event> events) 处理多个Event,在这个方法中调用Event intercept(Event event)
close 方法
c)静态内部类,实现Interceptor.Builder
package com.haoxin.flume;
import org.apache.flume.Context;
import org.apache.flume.Event;
import org.apache.flume.interceptor.Interceptor;
import java.nio.charset.Charset;
import java.util.ArrayList;
import java.util.List;/*** * 来简单的清洗数据*/
public class LogInterceptor implements Interceptor {@Overridepublic void initialize() {}/***处理多单个event*/@Overridepublic Event intercept(Event event) {//1.获取数据byte[] body = event.getBody();String log = new String(body, Charset.forName("UTF-8"));////////////////此处省略return null;}/***处理多个event,判读不为空的event 加入list中*/@Overridepublic List<Event> intercept(List<Event> list) {ArrayList<Event> events = new ArrayList<>();for (Event e:list) {Event intercept1 = intercept(e);if (intercept1 != null){events.add(intercept1);}}return events;}@Overridepublic void close() {}/*** 建静态内部类builder*/public static class Builder implements Interceptor.Builder{@Overridepublic void configure(Context context) {}@Overridepublic Interceptor build() {return new LogInterceptor();}}
}
3)Flume Channel选择器
channel选择器有replicating和multiplexing。它俩的区别是:replicating会将source过来的events发往所以channel,而multiplexing可以选择发往哪些channel。
4)Flume 监控器
Ganglia可以很好的监控flume的传输。