📜  讨论Apache Flume(1)

📅  最后修改于: 2023-12-03 14:57:35.882000             🧑  作者: Mango

Apache Flume

Apache Flume 是一个可靠、分布式、高可扩展的系统,用于将大量数据从不同源头传输到 Hadoop 系统中的目标存储介质。

什么是 Apache Flume?

Apache Flume 是一个可靠、分布式、高可扩展的系统,它的目的是将大量数据从不同源头传输到目标存储介质中,如 HDFS、HBase 和 Apache Solr 等等。

Flume 通过定义数据流管道(pipeline)的方式来将数据从源头到目的地。数据流管道是一种开放式框架,可以根据不同的需求来实现不同的场景。

特点
  • 支持多种数据源和目标存储介质
  • 可以扩展,支持自定义组件
  • 可以按需求灵活创建和管理数据流管道
  • 高效可靠,支持数据的 fault tolerance
  • 具有高度的可靠性和可伸缩性
工作原理

Flume 的主要原理是:数据源 → 接收 → 处理 → 目标存储介质

  • 数据源:Flume 支持多种数据源,如日志文件、Syslog、Avro、Thrift、JMS 等等
  • 接收:接收器(Source)将数据收集并处理后发送到数据流管道中
  • 处理:中间组件会将数据按照预先设置好的规则进行过滤和转换
  • 目标存储介质:最终将处理好的数据存储到指定的存储介质中
组件

Flume 组件主要分为三类:

  • Source:数据源组件,用来收集数据并发送到 Channel 中
  • Channel:缓存组件,接收由 Source 发送的数据,并将其缓存到内存或磁盘等介质中
  • Sink:存储组件,从 Channel 中读取数据并将其存储到目标介质中
举例

假如我们需要把一个系统中的 web log 数据传输到 Hadoop 分布式文件系统中,那么可以使用 Flume 程序。首先,在 web 服务器上将 log 数据通过 Flume 发送到数据流管道(pipeline)中,随后再将管道中的数据缓存到内存或磁盘中,最后再将缓存好的数据写入到 HDFS 中。

## 代码片段

### 配置 Source

定义一个 Source,类型为为 TAILDIR

webtail.sources = webtail webtail.sources.webtail.type = TAILDIR webtail.sources.webtail.positionFile = /var/flume/taildir_position.json webtail.sources.webtail.filegroups = logs webtail.sources.webtail.filegroups.logs = /var/logs/httpd/access.log webtail.sources.webtail.batchSize = 100


### 配置 Channel

定义一个 Channel,类型为 Memory

webtail.channels = webtail webtail.channels.webtail.type = memory webtail.channels.webtail.capacity = 1000000 webtail.channels.webtail.transactionCapacity = 1000 webtail.channels.webtail.keep-alive = 3


### 配置 Sink

定义一个 Sink,类型为 HDFS

webtail.sinks = webtail webtail.sinks.webtail.channel = webtail webtail.sinks.webtail.type = HDFS webtail.sinks.webtail.hdfs.path = /user/flume/weblog/%Y/%m/%d webtail.sinks.webtail.hdfs.rollInterval = 600 webtail.sinks.webtail.hdfs.rollSize = 104857600 webtail.sinks.webtail.hdfs.fileType = DataStream


### 配置工作流程

定义一个工作流程

webtail.sources = webtail webtail.channels = webtail webtail.sinks = webtail

webtail.sources.webtail.channels = webtail webtail.sinks.webtail.channel = webtail



```markdown
以上是 Flume 的简单介绍,它是一个可靠、分布式、高可扩展的系统,在大数据场景下应用广泛。