Source:
从数据发生器接收数据,并将接收的数据以Flume的event格式传递给一个或者多个通道channal,Flume提供多种数据接收的方式,比如Avro,Thrift,exec等
Channel:
channal是一种短暂的存储容器,它将从source处接收到的event格式的数据缓存起来,直到它们被sinks消费掉,它在source和sink是一个桥梁的作用,channal是一个完整的事务,这一点保证了数据在收发的时候的一致性. 并且它可以和任意数量的source和sink链接. 支持的类型有: JDBC channel , File System channel , Memort channel等.
sink:
sink将数据存储到集中存储器比如和HDFS,它从channals消费数据(events)并将其传递给目标地. 目标地可能是另一个sink,也可能HDFS,Hbase。
Agent :
Flume以agent为最小的独立运行单位。一个agent就是一个JVM。单agent由Source、Sink和Channel三大组件构成。一个Agent中可以包含多个Source,Sink,Channel。
常用Source:
Avro Source,Thrift Source:
Flume可以多级代理,代理与代理之间用avro去连接。不同的是Thrift Source 可以开启kerberos认证。
Exec Source:
ExecSource的配置就是设定一个Unix(linux)命令,然后通过这个命令不断输出数据。如果进程退出,Exec Source也一起退出,不会产生进一步的数据。
SPooling DirectorySource:
监测配置的目录下新增的文件,并将文件中的数据读取出来。但是,该source有两个需要注意的地方,第一个是拷贝到spool目录下的文件不可以再打开编辑,第二个是spool目录下不可包含相应的子目录。这个主要用途作为对日志的准实时监控。
Kafka Source:
Kafka Source是一个从Kafka的 Topic中读取消息的ApacheKafka消费者。如果有多个Kafka source运行,可以使用相同的Consumer Group配置它们,因此每个将读取topic中一组唯一的分区。
NetCat Source:
Netcat source 在某一端口上进行侦听,它将每一行文字变成一个事件源,也就是数据是基于换行符分隔。它的工作就像命令nc -k -l [host] [port] 换句话说,它打开一个指定端口,侦听数据将每一行文字变成Flume事件,并通过连接通道发送。
Syslog Sources:
读取syslog数据,并生成Flume 事件。 这个Source分成三类 SyslogTCP Source、
Multiport Syslog TCP Source(多端口)与SyslogUDP Source。其中TCP Source为每一个用回车(\ n)来分隔的字符串创建一个新的事件。而UDP Source将整个消息作为一个单一的事件。
常用的Channel:
1、file channel
FileChannel是一个持久化的channel,数据安全并且只要磁盘空间足够,它就可以将数据存储到磁盘上。
2、memorychannel
事件存储在具有可配置最大大小的内存队列中。 它是需要更高吞吐量并准备在代理故障的情况下丢失上载数据的流的理想选择。 Memory Channel是一个不稳定的Channel,它在内存中存储所有事件。如果进程异常停止,内存中的数据将不能让恢复。也受内存大小的限制。
常用的Sink:
1、 HDFS sink
此Sink将事件写入Hadoop分布式文件系统(HDFS)。 它目前支持创建文本和序列文件。 它支持两种文件类型的压缩。 可以基于经过的时间或数据大小或事件数量来周期性地滚动文件(关闭当前文件并创建新文件)。 它还通过属性(例如事件发生的时间戳或机器)来对数据进行桶/分区。 HDFS目录路径可能包含将由HDFS sink替换的格式化转义序列,以生成用于存储事件的目录/文件名。 使用此Sink需要安装hadoop,以便Flume可以使用Hadoop jar与HDFS集群进行通信
此sink将包含定界文本或JSON数据的事件直接传输到Hive表或分区。 事件使用Hive事务写入。 一旦将一组事件提交给Hive,它们就立即对Hive查询可见。 flume将流入的分区可以是预创建的,或者,如果缺少,Flume可以创建它们。
2、avro sink
avro sink形成了Flume分层收集支持的一半。 发送到avro sink的Flume event将转换为Avroevent 并发送到配置的主机名/端口 .
3、kafka sink
这是一个Flume Sink实现,可以将数据发布到Kafka topic ,将Flume与Kafka集成,以便基于pull的处理系统可以处理各种Flume源的数据。