Flume(一)概述

2022-04-08 09:24:22 浏览数 (1)

Flume图标

 Flume图标 Flume图标

Flume定义

Apache Flume是一个分布式,可靠且可用的系统,用于有效地收集,

。 Apache Flume 的使用不仅限于日志数据聚合。由于数据源是可定制的,因此 Flume 可用于传输大量事件数据,包括但不限于网络流量数据、社交媒体生成的数据、电子邮件消息以及几乎任何可能的数据源。

 流程图 流程图

Apache Flume是Apache Software Foundation的顶级项目。

Flume基础架构

Flume 事件被定义为一个数据流单元,它具有一个字节负载和一组可选的字符串属性。Flume 代理是一个 (JVM) 进程,它承载着事件从外部源流到下一个目的地(跃点)所通过的组件。

 数据流模型 数据流模型

Flume 源使用由外部源(如 Web 服务器)传递给它的事件。外部源以目标 Flume 源可识别的格式将事件发送到 Flume。例如,Avro Flume 源可用于从 Avro 客户端或流中的其他 Flume 代理接收 Avro 事件,这些代理从 Avro 接收器发送事件。可以使用 Thrift Flume Source 定义类似的流程,以从 Thrift Sink 或 Flume Thrift Rpc Client 或用 Flume thrift 协议生成的任何语言编写的 Thrift 客户端接收事件。当 Flume 源接收到事件时,它会将其存储到一个或多个频道。通道是一个被动存储,它保存事件直到它被 Flume 接收器消耗。文件通道就是一个示例–由本地文件系统支持。接收器从通道中删除事件并将其放入像 HDFS 这样的外部存储库(通过 Flume HDFS 接收器)或将其转发到流中的下一个 Flume 代理(下一跳)的 Flume 源。给定代理中的源和接收器与通道中暂存的事件异步运行。

Agent

Agent是一个JVM进程,它以事件的形式将数据从源头送至目的。 Agent主要有3个部分组成,

Source

Source是负责接收数据到Flume Agent的组件。Source组件可以处理各种类型、各种格式的日志数据,包括

、sequence generator、syslog、http、legacy。

Sink

Sink不断地轮询Channel中的事件且批量地移除它们,并将这些事件批量写入到存储或索引系统、或者被发送到另一个Flume Agent。

Sink组件目的地包括

、solr、自定义。 若sink 发送失败,会将数据重新写入Channel ,这里涉及到Flume 的事务(回滚)

Channel

Channel是位于Source和Sink之间的缓冲区。因此,Channel允许Source和Sink运作在不同的速率上。

,可以同时处理几个Source的写入操作和几个Sink的读取操作。

Flume自带两种Channel:

Memory Channel是内存中的队列。Memory Channel在不需要关心数据丢失的情景下适用。如果需要关心数据丢失,那么Memory Channel就不应该使用,因为程序死亡、机器宕机或者重启都会导致数据丢失。

File Channel将所有事件写到磁盘。因此在程序关闭或机器宕机的情况下不会丢失数据。

Event

传输单元,Flume数据传输的基本单元,以Event的形式将数据从源头送至目的地。Event由HeaderBody两部分组成,Header用来存放该event的一些属性,为K-V结构,Body用来存放该条数据,形式为字节数组。

 event存储形式 event存储形式

0 人点赞