Flume - JiyangM/spring GitHub Wiki

flume是一个分布式、可靠、和高可用的海量日志采集、聚合和传输的系统。支持在日志系统中定制各类数据发送方,用于收集数据;同时,Flume提供对数据进行简单处理,并写到各种数据接受方(比如文本、HDFS、Hbase等)的能力 。

  flume的数据流由事件(Event)贯穿始终。事件是Flume的基本数据单位,它携带日志数据(字节数组形式)并且携带有头信息,这些Event由Agent外部的Source生成,当Source捕获事件后会进行特定的格式化,然后Source会把事件推入(单个或多个)Channel中。你可以把Channel看作是一个缓冲区,它将保存事件直到Sink处理完该事件。Sink负责持久化日志或者把事件推向另一个Source。

 (1)flume的可靠性   当节点出现故障时,日志能够被传送到其他节点上而不会丢失。Flume提供了三种级别的可靠性保障,从强到弱依次分别为:end-to-end(收到数据agent首先将event写到磁盘上,当数据传送成功后,再删除;如果数据发送失败,可以重新发送。),Store on failure(这也是scribe采用的策略,当数据接收方crash时,将数据写到本地,待恢复后,继续发送),Besteffort(数据发送到接收方后,不会进行确认)。

 (2)flume的可恢复性   还是靠Channel。推荐使用FileChannel,事件持久化在本地文件系统里(性能较差)。

你是如何实现Flume数据传输的监控的

使用第三方框架Ganglia实时监控Flume。

Flume的Source,Sink,Channel的作用?你们Source是什么类型?

作用

(1)Source组件是专门用来收集数据的,可以处理各种类型、各种格式的日志数据,包括avro、thrift、exec、jms、spooling directory、netcat、sequence generator、syslog、http、legacy (2)Channel组件对采集到的数据进行缓存,可以存放在Memory或File中。 (3)Sink组件是用于把数据发送到目的地的组件,目的地包括Hdfs、Logger、avro、thrift、ipc、file、Hbase、solr、自定义。

我公司采用的Source类型为:

(1)监控后台日志:exec (2)监控后台产生日志的端口:netcat

Flume 的 Channel Selectors

Channel选择器是决定Source接收的一个特定事件写入哪些Channel的组件,它们告知Channel处理器,然后由其将事件写入到每个Channel。 复制Channel选择器,该选择器复制每个事件到通过Source的channels参数所指定的所有的Channels中。 多路复用channel选择器是一种专门用于动态路由事件的channel选择器,通过选择事件应该写入的channel,基于一个特定的事件头的值进行路由

Flume 参数调优

-Source 增加Source个数(使用Tair Dir Source时可增加FileGroups个数)可以增大Source的读取数据的能力。 例如:当某一个目录产生的文件过多时需要将这个文件目录拆分成多个文件目录,同时配置好多个 Source 以保证 Source 有足够的能力获取到新产生的数据。 batchSize 参数决定 Source 一次批量运输到 Channel 的event条数,适当调大这个参数可以提高 Source 搬运 Event 到 Channel 时的性能。

  • Channel type 选择 memory 时 Channel 的性能最好,但是如果 Flume 进程意外挂掉可能会丢失数据。type 选择 file 时 Channel 的容错性更好,但是性能上会比 memory channel 差。
  • 使用file Channel时 dataDirs 配置多个不同盘下的目录可以提高性能。
  • Capacity 参数决定 Channel 可容纳最大的 event 条数。
  • transactionCapacity 参数决定每次 Source 往 channel 里面写的最大event 条数和每次 Sink 从channel 里面读的最大 event 条数。transactionCapacity 需要大于 Source 和Sink的batchSize 参数。

Flume 采集数据会丢失吗?

不会,Channel 存储可以存储在 File 中,数据传输自身有事务。

Flume 的负载均衡和故障转移吗

目的是为了提高整个系统的容错能力和稳定性。简单配置就可以轻松实现,首先需要设置 Sink 组,同一个 Sink 组内有多个子 Sink,不同 Sink 之间可以配置成负载均衡或者故障转移。