Flume的一些核心概念:
Agent 使用JVM 运行Flume。每台机器运行一个agent,但是可以在一个agent中包含多个sources和sinks。
Client 生产数据,运行在一个独立的线程。
Source 从Client收集数据,传递给Channel。
Sink 从Channel收集数据,运行在一个独立线程。
Channel 连接 sources 和 sinks ,这个有点像一个队列。
Events 可以是日志记录、 avro 对象等。
这是一个flume-ng 最简单的图。flume-ng 是由一个个agent组成的。
一个agent就像一个细胞一样。当然可以自由组合,如下图:
上面是两个agent链接在一起的,再看看更多的......
整个flume-ng 架子是由一个一个agent拼接而成的,支持多层次多项扩展。这样非常灵活。
当然,也可以这么配:
同时,agent还支持选择器,就是一个source支持多个channel和多个sink,这样就完成了数据的分发。
下面说说 每个agent的构造:
每个agent里都有三部分构成:source、channel 和 sink 。
就相当于source接收数据,通过channel传输数据,sink把数据写到下一端。这就完了,就这么简单。其中source有很多种可以选择,channel有很多种可以选择,sink也同样有多种可以选择,并且都支持自定义。