Flume 从 0 到 1 学习 —— 第一章 Flume 介绍

1. Flume 定义

Flume 是 Cloudera 提供的一个高可用的,高可靠的,分布式的海量日志采集、聚合和传输系统。Flume 基于流式架构、灵活简单。

在这里插入图片描述

2. Flume 组成架构

Flume 组成架构,如图 1-1、1-2 所示:

在这里插入图片描述

图 1-1 Flume 组成架构
Flume组成架构详解,如图所示:

在这里插入图片描述

图 1-2 Flume组成架构详解
下面我们来详细介绍一下Flume架构中的组件:

2.1 Agent

Agent 是一个 JVM 进程,它以事件的形式将数据从源头送至目的,是 Flume 数据传输的基本单元。

Agent 主要有3个部分组成,SourceChannelSink

2.2 Source

Source 是负责接收数据到 Flume Agent 的组件。Source 组件可以处理各种类型、各种格式的日志数据,包括avro、thrift、exec、jms、spooling directory、netcat、sequence generator、syslog、http、legacy。

(1)Taildir Source相比Exec Source、Spooling Directory Source的优势

TailDir Source:断点续传、多目录。Flume1.6以前需要自己自定义Source记录每次读取文件位置,实现断点续传。

Exec Source可以实时搜集数据,但是在Flume不运行或者Shell命令出错的情况下,数据将会丢失。

Spooling Directory Source监控目录,不支持断点续传。

(2)batchSize大小如何设置?

答:Event 1K左右时,500-1000合适(默认为100)

Flume 中有三种可监控文件或目录的 source、分别是 :Exec SourceSpooling Directory SourceTaildir Source

  • Exec Source 通过tail -f命令去tail 住一个文件,然后实时同步日志到 sink。但存在的问题是,当 agent 进程挂掉重启后,会有重复消费的问题。可以通过增加UUID来解决,或通过改进 ExecSource 来解决。

  • Spooling Directory Source 可监听一个目录,同步目录中的新文件到sink,被同步完的文件可被立即删除或被打上标记。适合用于同步新文件,但不适合对实时追加日志的文件进行监听并同步。如果需要实时监听追加内容的文件,可对SpoolDirectorySource进行改进。

  • Taildir Source 可实时监控一批文件,并记录每个文件最新消费位置,agent进程重启后不会有重复消费的问题。 使用时建议用1.8.0版本的flume,1.8.0版本中解决了Taildir Source一个可能会丢数据的bug。

2.3 Channel

Channel 是位于 Source 和 Sink 之间的缓冲区。因此,Channel 允许 Source 和 Sink 运作在不同的速率上。Channel 是线程安全的,可以同时处理几个 Source 的写入操作和几个 Sink 的读取操作。

Flume 自带两种 Channel:Memory ChannelFile Channel

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

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

2.4 Sink

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

Sink 是完全事务性的。在从 Channel 批量删除数据之前,每个 Sink 用 Channel 启动一个事务。批量事件一旦成功写出到存储系统或下一个 Flume Agent,Sink 就利用 Channel 提交事务。事务一旦被提交,该 Channel 从自己的内部缓冲区删除事件。

Sink 组件目的地包括 hdfs、logger、avro、thrift、ipc、file、null、HBase、solr、自定义。

2.5 Event

传输单元,Flume数据传输的基本单元,以事件的形式将数据从源头送至目的地。

3. Flume 拓扑结构

Flume的拓扑结构如图1-3、1-4、1-5和1-6所示:

在这里插入图片描述

图 1-3 Flume Agent连接
![在这里插入图片描述](https://img-blog.csdnimg.cn/2021011117362661.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2R3amYzMjE=,size_16,color_FFFFFF,t_70#pic_center)
图 1-4 单 source,多 channel、sink
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210111173639833.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2R3amYzMjE=,size_16,color_FFFFFF,t_70#pic_center)
图 1-5 Flume 负载均衡
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210111173652579.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2R3amYzMjE=,size_16,color_FFFFFF,t_70#pic_center)
图 1-6 Flume Agent 聚合
## 4. Flume Agent 内部原理

在这里插入图片描述

Flume Agent 内部原理图解
1. source 接收事件,交给 Channel 处理器。 2. Channel 处理器将事件传递给拦截器,拦截器处理后返回给 Channel 处理器。 3. Channel 处理器将每个事件给 Channel 选择器。 4. Channel 选择器返回写入事件 Channel 列表。 5. 根据 Channel 选择器的选择结果,将事件写入相应 Channel。 6. Sink 处理器选择其中一个 Sink 去获取 Channel 数据,并将数据写入到 存储器或 Flume Agent。

猜你喜欢

转载自blog.csdn.net/dwjf321/article/details/112479820