数据采集工具——Flume

Posted 小企鹅推雪球!

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据采集工具——Flume相关的知识,希望对你有一定的参考价值。

文章目录

Flume定义

  1. Flume由Cloudera公司开发,是一个分布式、高可靠、高可用的海量日志采集、聚合、传输的系统。
  2. Flume支持在日志系统中定制各类数据发送方,用于采集数据;
  3. Flume提供对数据进行简单处理,并写到各种数据接收方的能力。
  4. Flume是实时采集日志的数据采集引擎

Flume组成

  1. Flume有3个重要组件:Source、Channel、Sink。
  2. Flume的特点:
    1. 分布式:flume分布式集群部署,扩展性好
    2. 可靠性好: 当节点出现故障时,日志能够被传送到其他节点上而不会丢失
    3. 易用性:flume配置使用较繁琐,对使用人员专业技术要求高,但是配置完毕后,很好使用
    4. 实时采集:flume采集流模式进行数据实时采集
  3. 与Flume类似的数据采集工具:dataX、
    1. dataX是阿里开源软件异构数据源离线同步工具。实现包括关系型数据库(mysql、Oracle等)、HDFS、Hive、ODPS、HBase、FTP等各种异构数据源之间稳定高效的数据同步功能。
    2. dataX特点:
      1. 易用性:没有界面,以执行脚本方式运行,对使用人员技术要求较高
      2. 数据抽取性能高
      3. dataX可独立部署
      4. dataX适用于在异构数据库/文件系统之间高速交换数据

Flume体系结构

  1. Flume架构中的组件——Agent:
    1. Agent本质上是一个 JVM 进程,Agent控制Event数据流从外部日志生产者那里传输到目的地(或者是下一个Agent)。
  2. 一个完整的Agent中包含了三个组件Source、Channel和Sink。 Source是指数据的来源和方式, Channel是一个数据的缓冲池,Sink定义了数据输出的方式和目的地。
  3. Source是负责接收数据到Flume Agent的组件。Source是负责接收数据到Flume Agent的组件。型、各种格式的日志数据,包括avro、exec、spooldir、netcat等。
  4. Channel是位于Source和Sink之间的缓冲区。Channel允许Source和Sink运作在不同的速率上。Channel是线程安全的,可以同时处理多个Source的写入操作及多个Sink的读取操作。
  5. 常用的Channel包括:Memory Channel和File Channel。
    1. Memory Channel是内存中的队列。Memory Channel在允许数据丢失的情景下适用。如果不允许数据丢失,应该避免使用Memory Channel,因为程序死亡、机器宕机或者重启都可能会导致数据丢失;
    2. File Channel将所有事件写到磁盘。File Channel将所有事件写到磁盘。会丢失数据;
  6. Sink不断地轮询Channel中的事件且批量地移除它们,并将这些事件批量写入到存储或索引系统、或者被发送到另一个Flume Agent。
  7. Sink是完全事务性的。在从Channel批量删除数据之前,每个Sink用Channel启Sink是完全事务性的。在从Channel批量删除数据之前,每个Sink用Channel启Sink是完全事务性的。在从Channel批量删除数据之前,每个Sink用Channel启事件。
  8. Sink组件包括hdfs、logger、avro、file、null、HBase、消息队列等。
  9. Event是Flume定义的一个数据流传输的最小单位。

Flume 拓扑结构

  1. 串行模式:将多个flume给顺序连接起来,从最初的source开始到最终sink传送的目的存储系统。串行模式下不建议桥接过多的flume数量, flume数量过多不仅会影响传输速率,而且一旦传输过程中某个节点flume宕机,会影响整个传输系统。

  2. 复制模式(单Souce多Channel、Sink模式):复制模式下,事件流向一个或者多个目的地。这种模式将数据源复制到多个channel中,每个channel都有相同的数据,sink可以选择传送的不同的目的地。

  3. 负载均衡模式(单Source、Channel多Sink):将多个sink逻辑上分到一个sink组,flume将数据发送到不同的sink,主要解决负载均衡和故障转移问题。

  1. 聚合模式:聚合模式下,日常web应用通常分布在上百个服务器,大者甚至上千个、上万个服务器。产生的日志,处理起来也非常麻烦。用这种组合方式能很好的解决这一问题,每台服务器部署一个flume采集日志,传送到一个集中收集日志的flume,再由此flume上传到hdfs、hive、hbase、消息队列中。

Flume内部原理

  1. 总体数据流向:Souce => Channel => Sink:
  2. Channel:处理器,拦截器,选择器。
  3. Source接收事件,交给其Channel处理器处理事件
  4. 处理器通过拦截器Interceptor,对事件一些处理,比如压缩解码,正则拦截,时间戳拦截,分类等
  5. 经过拦截器处理过的事件再传给Channel选择器,将事件写入相应的Channel。
    1. 第一种Channel Selector:Replicating Channel Selector(默认),会将source过来的Event发往所有Channel(比较常用的场景是,用多个Channel实现冗余副本,保证可用性)
    2. 第二种Channel Selector:Multiplexing Channel Selector,根据配置分发event。此selector会根据event中某个header对应的value来将event发往不同的channel
  6. 最后由Sink处理器处理各个Channel的事件

Flume——Source组件

  1. 常见的 Source 有:avro source,exec source,netcat source,spooling directory source,Taildir Source。
  2. avro source:监听 Avro 端口来接收外部 avro 客户端的事件流。avro-source接收到的是经过avro序列化后的数据,然后反序列化数据继续传输。如果是avrosource的话,源数据必须是经过avro序列化后的数据。利用 Avro source可以实现多级流动、扇出流、扇入流等效果。接收通过flume提供的avro客户端发送的日志信息。
    1. Avro是Hadoop的一个数据序列化系统,设计用于支持大批量数据交换的应用。
    2. Avro的特点:支持二进制序列化方式,可以便捷,快速地处理大量数据;动态语言友好,Avro提供的机制使动态语言可以方便地处理Avro数据;
  3. exec source:可以将命令产生的输出作为source。如ping192.168.234.163、tail -f hive.log。
  4. netcat source:一个NetCat Source用来监听一个指定端口,并接收监听到的数据。
  5. spooling directory source:将指定的文件加入到“自动搜集”目录中。flume会持续监听这个目录,把文件当做source来处理。注意:一旦文件被放到目录中后,便不能修改,如果修改,flume会报错。此外,也不能有重名的文件。
  6. Taildir Source(1.7):监控指定的多个文件,一旦文件内有新写入的数据,就会将其写入到指定的sink内,本来源可靠性高,不会丢失数据。其不会对于跟踪的文件有任何处理,不会重命名也不会删除,不会做任何修改。

Flume——Channel组件

  1. Flume采集的日志需要进行缓存,Flume提供了Channel组件用来缓存数据。
  2. 常见的Channel 有:
    1. memory channel:缓存到内存中(最常用)
    2. file channel:缓存到文件中
    3. JDBC channel:通过JDBC缓存到关系型数据库中
    4. kafka channel:缓存到kafka中

Flume——Sink组件

  1. Channel 缓存的数据最终需要进行保存,Flume提供了Sink组件用来保存数据。
  2. 常见的 Sink有:
    1. logger sink:将信息显示在标准输出上,主要用于测试
    2. avro sink:Flume events发送到sink,转换为Avro events,并发送到配置好的hostname/port。从配置好的channel按照配置好的批量大小批量获取events
    3. null sink:将接收到events全部丢弃
    4. HDFS sink:将 events 写进HDFS。支持创建文本和序列文件,支持两种文件类型压缩。文件可以基于数据的经过时间、大小、事件的数量周期性地滚动
    5. Hive sink:该sink streams 将包含分割文本或者JSON数据的events直接传送到Hive表或分区中。使用Hive 事务写events。当一系列events提交到Hive时,它们马上可以被Hive查询到
    6. HBase sink:保存到HBase中
    7. kafka sink:保存到kafka中

以上是关于数据采集工具——Flume的主要内容,如果未能解决你的问题,请参考以下文章

17-ETL工具大数据架构Flume介绍Flume组件介绍

FlumeLogstashFilebeat对比

FusionInsight大数据开发---Flume应用开发

Apache Flume简介及安装部署

Hadoop之Flume

Hadoop之Flume