- Source:数据源
- Channel:管道
- Sink:数据目的地
Source
通过source组件可以指定让Flume读取哪里的数据,然后将数据传递给后面的 channel
Flume内置支持读取很多种数据源,基于文件、基于目录、基于TCP\UDP端口、基于HTTP、Kafka,也支持自定义数据源,一般生产中我们主要使用基于目录或基于文件,或是端口的
常用Source:
- Exec Source:实现文件监控,可以实时监控文件中的新增内容,类似于linux中的tail -f 效果
- NetCat TCP/UDP Source: 采集指定端口(tcp、udp)的数据,可以读取流经端口的每一行数据
- Spooling Directory Source:采集文件夹里新增的文件
- Kafka Source:从Kafka消息队列中采集数据
其中execsource 和 kafkasource在实际工作中是最 常见的,可以满足大部分的数据采集需求
Channel
Channel的类型有很多:内存、文件,内存+文件、JDBC等
- Memory Channel:使用内存作为数据的存储 优点是效率高,因为就不涉及磁盘IO,缺点有两个 1:可能会丢数据,如果Flume的agent挂了,那么channel中的数据就丢失了。 2:内存是有限的,会存在内存不够用的情况。
- File Channel:使用文件来作为数据的存储 优点是数据不会丢失 缺点是效率相对内存来说会有点慢,但是这个慢并没有我们想象中的那么慢, 所以这个也是比较常用的一种channel。
- Spillable Memory Channel:使用内存和文件作为数据存储,即先把数据存到内存中,如果内存中 数据达到阈值再flush到文件中 优点:解决了内存不够用的问题。 缺点:还是存在数据丢失的风险
Sink
Sink的表现形式有很多:打印到控制台、HDFS、Kafka等
- Logger Sink:将数据作为日志处理,可以选择打印到控制台或者写到文件中,这个主要在测试的时 候使用
- HDFS Sink:将数据传输到HDFS中,这个是比较常见的,主要针对离线计算的场景
- Kafka Sink:将数据发送到kafka消息队列中,这个也是比较常见的,主要针对实时计算场景,数据 不落盘,实时传输,最后使用实时计算框架直接处理。