Flume个人心得笔记

一、概述

  1. Flume是Apache提供的开源的、分布式的、可靠的日志收集系统
  2. 能够有效的收集、聚合、传输大量的日志数据
  3. Flume有2个版本:Flume-og(Flume0.9x)和Flume-ng(Flume1.X)。Flume-og和Flume-ng不兼容

二.Flume的特性

  1. 可靠性:事务型的数据传递,保证数据的可靠性。一个日志交给flume来处理,不会出现此日志丢失或未被处理的情况
  2. 可恢复性:通道可以以内存或文件的方式实现,内存更快,但不可恢复。文件较慢但提供了可恢复性

三、基本概念

  1. Event:将收集到的每一条日志封装成一个Event对象 - 在Flume中流动的是Event。Event的格式采用了json格式来定义的,这个json串中包含了2个部分:headers和body
  2. Flume中的组件是以Agent形式来出现的。Agent包含三个部分:Source、Channel和Sink
    1. Source:从源头采集数据
    2. Channel:临时存储数据
    3. Sink:将数据发往目的地

四、自定义 --- 扩展

如果Flume中提供的Source不符合当前场景,需要自定义Source。如果在Flume中自定义Source,那么需要确定Source的数据获取方式:PollableSource(主动拉取数据)和EventDrivenSource(事件驱动方式)

1.创建元数据

2.代码

public class AuthSource extends AbstractSource 
	implements Configurable, Source, EventDrivenSource {
	private String path;
	private ExecutorService es;

	// 获取配置文件中的属性
	@Override
	public void configure(Context context) {
		path = context.getString("file");
	}
	// 启动Source
	@Override
	public synchronized void start() {
		// 获取Channel
		ChannelProcessor cp = this.getChannelProcessor();
		es = Executors.newFixedThreadPool(10);
		es.submit(new FileThread(path, cp));
	}
	@Override
	public synchronized void stop() {
		es.shutdown();
	}
}
class FileThread implements Runnable {
	private BufferedReader br;
	private ChannelProcessor cp;
	public FileThread(String path, ChannelProcessor cp) {
		this.cp = cp;
		File file = new File(path);
		if (file.isFile())
			try {
				br = new BufferedReader(new FileReader(path));
			} catch (FileNotFoundException e) {
				e.printStackTrace();
			}
	}
	@Override
	public void run() {
		while (true) {
			try {
				// 读取数据
				String name = br.readLine();
				if (name == null)
					break;
				String age = br.readLine();
				String description = br.readLine();
				// 定义头部信息
				Map<String, String> headers = new HashMap<>();
				headers.put("name", name);
				headers.put("age", age);
				// 创建一个Event对象
				Event e = EventBuilder.withBody(description.getBytes(), headers);
				// 将event放到通道中
				cp.processEvent(e);
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
		try {
			br.close();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
}

3.打成jar包上传到flume的lib目录下

auth.jar

4.编辑一个文件 更新配置

5.测试

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值