全部产品
Search
文档中心

开源大数据平台E-MapReduce:Flume

更新时间:Dec 12, 2024

Apache Flume是一个分布式、可靠和高可用的系统,可以从大量不同的数据源有效地收集、聚合和移动日志数据,从而集中式的存储数据。

使用场景

Flume使用最多的场景是日志收集,也可以通过定制Source来传输其他不同类型的数据。

Flume最终会将数据落地到实时计算平台(例如Flink、Spark Streaming和Storm)、离线计算平台上(例如MR、Hive和Presto),也可仅落地到数据存储系统中(例如HDFS、OSS、Kafka和Elasticsearch),为后续分析数据和清洗数据做准备。flume2

架构

Flume Agent是一个Flume的实例,本质是一个JVM进程,控制Event数据流从生产者传输到消费者。一个Flume Agent由Source、Channel、Sink组成。其中,Source和Channel可以是一对多的关系,Channel和Sink也可以是一对多的关系。flume

基本概念

名称

描述

Event

是数据流通过Flume Agent的基本单位。Event由一个可选的Header字典和一个装载数据的字节数组组成。

示例如下。

--------------------------------
| Header (Map) | Body (byte[]) |
--------------------------------
               Flume Event

Source

是数据源收集器,从外部数据源收集数据,并批量发送到一个或多个Channel中。

常见Source如下:

  • Avro Source:通过监听Avro端口获取Avro Client发送的事件。Avro是Hadoop提供的一种协议,用于数据序列化。

  • Exec Source:通过监听命令行输出获取数据,例如tail -f /var/log/messages

  • NetCat TCP Source:监听指定TCP端口获取数据,与Netcat UDP Source类似。

  • Taildir Source:监控目录下的多个文件,记录偏移量,并且不会丢失数据,较为常用。

Channel

是Source和Sink之间的缓冲队列。

常见Channel如下:

  • Memory Channel:缓存到内存中,性能高,较为常用。

  • File Channel:缓存到文件中,会记录Checkpoint和DATA文件,可靠性高,但性能较差。

  • JDBC Channel:缓存到关系型数据库中。

  • Kafka Channel:通过Kafka来缓存数据。

Sink

从Channel中获取Event,并将以事务的形式Commit到外部存储中。一旦事务Commit成功,该Event会从Channel中移除。

常见Sink如下:

  • Logger Sink:用于测试。

  • Avro Sink:转换成Avro Event,主要用于连接多个Flume Agent。

  • HDFS Sink:写入HDFS,较为常用。

  • Hive Sink:写入Hive表或分区,使用Hive事务写Events。

  • Kafka Sink:写入Kafka。