Flume日志采集工具入门简介

大数据技术 潘老师 3年前 (2021-05-05) 1711 ℃ (0) 扫码查看

大数据技术架构中,主要包括数据采集、数据存储、数据计算、数据分析、数据可视化等核心步骤。其中数据采集至关重要,只有将数据源的数据采集过来,才可以进行计算和分析等工作,但是由于数据源很分散,导致数据的收集变得越发复杂。
目前的数据采集主要分为结构化数据采集和非结构化数据采集,采集的方式也略有区别,在此我们主要介绍非结构化数据采集工具Flume。

一、什么是Flume

Flume是一种用于高效收集、聚合和移动大量日志数据的分布式的可靠可用服务。它具有基于流式数据的简单灵活架构,基于它的可靠性机制和许多故障切换及恢复机制来说,它具有健壮性和容错性,使用了一个允许在线分析应用程序的简单可扩展数据模型。

Apache Flume是一种分布式、 可靠和可用的系统,用于高效收集、聚合,以及将大量日志数据从许多不同的来源移动到集中式数据存储上。
使用Apache Flume不仅限于日志数据的聚合。由于数据源是可定制的,因此可以使用Flume来传输大量的事件数据,包括但不限于网络流量数据、社交媒体生成的数据、电子邮件消息和其他数据源。

二、Flume 的特点

1.事务

Flume使用两个独立的事务负责从Source到Channel到Sink的事件传递。在Source到Channel的过程中,一旦所有事件全部传递到 Channel并且提交成功,那么Source就将该文件标记为完成;从Channel到Sink的过程同样以事务的方式传递。由于某种原因使得事件无法记录时,事务将回滚,所有事件仍保留在Channel中重新等待传递。

2.可靠性

Channel中的File Channel具有持久性,事件写入File Channel后,即使Agent重新启动,事件也不会丢失。Flume 中还提供了一种 Memory Channel 的方式,但它不具有持久存储的能力,数据完整性不能得到保证;与File Channel相比,Memory Channel的优点是具有较高的吞吐量。

3.多层代理

使用分层结构的Flume代理,实现了Flume 事件的汇聚,也就是第一层代理采集原始Source的事件,并将它们发送到第二层,第二层代理数量比第一层少, 汇总了第一层事件后再把这些事件写入HDFS。
将一组节点的事件汇聚到一个文件中,这样可以减少文件数量,增加文件大小,减轻施加在HDFS上的压力。另外,因为向文件输入数据的节点变多,所以文件可以更快地推陈出新,从而使得这些文件可用于分析的时间更接近于事件的创建时间。

三、Flume 架构

Flume由一组以分布式拓扑结构相互连接的代理构成。Flume中有多个Agent,即Flume代理。Agent 是由Source、Sink 和Channel共同构成的Java进程,Flume 的Source产生件后将其传给Channel, Channel 存储这些事件直至转发给Sink。 Flume 主体架构如图的所示。
Flume日志采集工具入门简介

四、Flume 的主要组件

Flume的主要组件有Event、Client、 Agent、 Source、 Channel 和Sink等。接下来我们一起认识下各个组件的作用。
起认识一下各组件的作用。

1)Event、 Client 与Agent数据 传输

事件Event是Flume数据传输的基本单元,Flume 以事件的形式将数据从源头传送到最终目的地。
假设我们需要进行日志传输,Client 把原始雷要收集的日志信息包装成Events并且发送到一个或多个Agent上。这样做的主要目的是从数据源系统中将Flume解耦。
代理Agent是Flume流的基础部分,一个Agent 包含Source、Channel、 Sink 和其他组件,它基于这些组件把Event从一个节点传输到另一个节点或最终目的地上,由Flume为这些组件提供配置、生命周期管理和监控支持。

2) Source- Event 接收

Source的主要职责是接收Event,并将Event批量地放到一个或者多个Channel中。接下来我们分别介绍一下 常用的两类Source: Spooling Directory Source和Exec Source。
1. Spooling Directory Source获取数据
Spoling Diretory Source是通过读取硬盘上需要被收集数据的文件到spooling目录来获取数据,然后再将数据发送到Chanmel。该Source会监控指定的目录来发现新文件并解析新文件。在给定的文件已被读完之后,它被重命名为指示完成(或可选地到除),属性
列表如表所示。

属性名 默认值 含义
type 类型,spooldir
spoolDir 监听目录
fileSuffix COMPLETE 当数据读取完后添加的文件后缀
deletePolicy never 当文件读取完后,文件是否删除, 可选值有never,Immediate
fileHeader fasle 是否把路径加入Header

与Exec源不同,即使Flume重新启动或死机,这种Soure也是可靠的,不会丢失数据。同时需要注意的是,产生的文件不能进行任意修改,否则会停止处理;在实际应用中可以将文件写到一个临时目录下之后再统一移动到监听目录下。

2. Exec Source收集数据
Exec源在启动时运行给定的UNIX命令,并期望该进程在标准输出上连续生成数据。如果进程由于任何原因退出,则源也将退出并且不会继续产生数据。这意味着诸如cat [named pipe]或 tail -F [file]的配置将产生期望的结果。Exec Source属性列表如下表所示。

属性名 默认值 含义
type Exec类型
command 执行的命令

3)Channel- Event 传输

Channel位于Source和Sink之间,用于缓存Event, 当Sink成功将Event发送到下一个Agent或最终目的处之后,会将Event从Channel上移除。不同的Channel提供的持久化水平也是不一样的,并且Channel可以和任何数量的Source和Sink工作。
1. Memory Channel内存中存储
Memory Channel 是指Events被存储在已配置最大容量的内存队列中,因此它不具有持久存储能力,Memory Channel的配置属性如下表所示。

属性名 默认值 含义
type 类型名称,memory
Capacity 10000 存放的Event最大数目
transactionCapacity 10000 每次事务中,从Source服务的数据, 或写入Sink的数据(条数)
byteCapacityBufferPercentage 20 Header中数据的比例
byteCapacity 存储的最大数据量(byte)

在使用Menmory Chanel时,如果出现问题导致虚拟机宕机或操作系统重新启动,事件就会丢失,在这种情况下,数据完整性不能保证,这种情况是否可以接受,主要取决于具体应用。与File Channel相比,Memory Channel的优势在于具有较高的吞吐量,在要求高吞吐量井且允许Agent Event失败所导致数据丢失的情况下,Memory Channel是理想的选择。

2. File Channel持久化存储
File Channel具有持久性,只要事件被写入Channel,即使代理重新启动,事件也不会丢失。
能保障数据的完整性,File Channel属性如下表所示。

属性名 默认值 含义
Type 类型名称,file
checkpointDir /.fume/fle
-channel/ checkpoint
Checkpoint文件存放位置
dataDirs -/.flume/file–channe/data 数据目录,分隔符分割

4)Sink- -Event 发送

Sink的主要职责是将Event 传输到下一个Agent 或最终目的处,成功传输完成后将Event从Channel中移除。Sink 主要分为两大类: File Roll Sink和Hdfs Sink.
1. File Roll Sink写入本地
File Roll Sink是指将事件写入本地文件系统中,首先我们要在本地文件系统中创建一个缓冲目录,新增文件是由手工添加的,如下表所示。

属性名 默认 描述
channel 通道
Type 组件类型名称,应为file_roll
sink.drecory 存储文件的目录
sink.path.Manager DEFAULT 应用的路径管理器的实现
sink.path.Manager.extension 使用默认路径管理器时的文件扩展名
sink.path.Manager.prefix 如果使用默认路径管理器,则添加到请求文件名的字符串中
sink.roll.Interval 30 每30秒滚动一次。指定0将禁用滚动,并导致将所有事件写入单个文件中
sink. serializer TEXT 其他可能的选项包括avro_event或实现EventSerializer.Builder接口的FQCN
batchSize 100

2. HDFS Sink写入HDFS
HDFS Sink是指将事件写入Hadoop分布式文件系统(HDFS)。它可以根据经过的时间、数据大小或事件数量定期滚动文件,也就是关闭当前文件并创建新文件。对于正在进行写操作处理的文件,其文件名会添加一个后缀“.tmp”,以表明文件处理尚未完成。具体属性如下表所示。

属性名 默认值 含义
Type 类型名称
Hdfs.path HDFS目录
Hdfs.flePrefix FlumeData Flume写入HDFS的文件前缀
Hdfs.rollinterval 30 文件滚动时间间隔(单位: 秒)
Hdfs.rollSize 1024 文件滚动事件大小(单位:byte)
Hdfs.rollCount 10 文件滚动事件数目

5)其他组件

Interceptor 组件主要作用于Source,可以按照特定的顾序对Events进行装饰或过滤,Sink Group允许用户将多个Sink组合在一起, Sink Pocessor则能够通过组中的Sink来实现负载均衡,也可以在一个 Sink出现故障时切换转到另一个Sink。


版权声明:本站文章,如无说明,均为本站原创,转载请注明文章来源。如有侵权,请联系博主删除。
本文链接:https://www.panziye.com/java/bigdata/3152.html
喜欢 (5)
请潘老师喝杯Coffee吧!】
分享 (0)
用户头像
发表我的评论
取消评论
表情 贴图 签到 代码

Hi,您需要填写昵称和邮箱!

  • 昵称【必填】
  • 邮箱【必填】
  • 网址【可选】