天天看点

Flume各组件总结

一个Agent主要由三部分组成 Source Channel Sink

Source是负责接收数据到Flume Agent的组件。

类型如下:avor /thrift /exec /jms /spooling directory /netcat /sequence generator /syslog /http /legacy

  1. source

Avro source:监听Avro端口和从外部Avro端接收事件流 当与上一个flume agent搭配内置Avro sink 可以创建分层集合拓扑。

thrif source:监听Thrif端口并从外部Thrif客户端接收事件。

exec source:可以实时搜集数据,但是在Flume不运行或者Shell命令出错的情况下,数据将会丢失。 例如:通过tail -F去获取Nginx的访问日志,如果Flume挂掉,Nginx访问日志继续导入到日志文件中,那么在Flume挂掉的这段时间中,新产生的日志Flume是无法获取到的,为了更好的可靠性保证,可以考虑使用Spooling

Directory Source,拿实时获取Nginx访问日志来说,Spooling Directory

Source虽然做不到实时,但是也可以通过日志文件的切分,做到准实时。

spooling directory source:通过监听某个目录下的新增文件,并将文件的内容读取出来,实现日志信息的收集。实际使用中会结合log4j进行使用。被传输结束的文件会修改后缀名,添加.completed后缀(可以自定义)。

kafka source:Kafka Source是一个从Kafka主题读取消息的Apache Kafka消费者。 如果有多个Kafka源运行,可以使用相同的Consumer Group配置它们,这样每个都将为主题读取一组唯一的分区。

TailDirSource:断点续传、多目录。能够保证数据不丢失,还能够进行实时监控。Flume1.6以前需要自己自定义Source记录每次读取文件位置,实现断点续传。

2.sink

Sink组件目的地包括hdfs、logger、avro、thrift、ipc、file、HBase、solr、自定义。

3.channel

flume自带两种channel:Memory Channel 和 File Channel

Memory Channel是内存中队列:性能高 可能丢失数据

File Channel:将所有事件写入磁盘 不用担心数据丢失

4.Flume中channel选择器

flume channel selectors允许给一个source可以配置多个channel的能力。这种模式有两种方式,一种是用来复制(Replication),这也是默认配置,另一种是用来分流多路复用(Multiplexing)。

Flume中channel选择器(selector.type配置)必须实现ChannelSelector接口,实现了该接口的类主要作用是告诉Source中接收到的Event应该发送到哪些Channel,在Flume中主要由两个实现方式:

1,复用,实现类:MultiplexingChannelSelector (Multiplexing n. 多路技术 多路复用)

2,复制,实现类:ReplicatingChannelSelector (Replicate n. 复制品)

如果没有手动配置,source的默认channel选择器类型是replicating(复制),当然这个选择器只针对source配置了多个channel的时候。

一个souce可以向多个channel同时写数据,所以也就产生了以何种方式向多个channel写的问题(比如自带的复制选择器,会把数据完整地发送到每一个channel,而多路分发选择器就可以通过配置来按照一定的规则进行分发,听起来很像负载均衡),channel选择器也就应运而生。

继续阅读