Flume 配置文件编写技巧(包会的,抄就完了)

本文涉及的产品
实时计算 Flink 版,5000CU*H 3个月
检索分析服务 Elasticsearch 版,2核4GB开发者规格 1个月
实时数仓Hologres,5000CU*H 100GB 3个月
简介: 本文介绍了Apache Flume的基础配置,包括数据源(Source)、数据通道(Channel)和数据处理器(Sink)三大部分。配置文件编写流程包括查阅官方文档、参考样例配置、实际操作配置。文章提供了一个经典例子,展示如何从本地端口收集数据并通过内存通道缓冲,最终记录到日志。配置流程包括声明组件、配置Source、Sink和Channel,然后将它们绑定。通过示例展示了如何配置HTTP Source和HDFS Sink,并给出了完整的配置文件示例及测试步骤,帮助读者理解Flume配置文件的编写。

@[toc]

前言:如果你在编写 Flume 配置文件时,分不清 SourceChannelSink 三者之间的关系,不懂得 Flume 配置文件的编写流程,无从下手,那么你可以选择看看这篇文章,能对你有所帮助。

Flume 配置的三大部分

Flume 的配置文件主要包含三大部分,分别是:

  • 数据源 Source:负责从多种数据源收集数据,如日志文件、网络流、系统日志等。

  • 数据通道 Channel:通道负责将收集到的数据暂存起来,进行缓冲,确保数据不会丢失。通道可以是内存通道、文件通道或者 Kafka 等其他队列。

  • 数据处理 Sink:数据处理器,负责将数据发送到目标位置进行存储,比如 HDFS、HBase、Kafka 等。

需要注意的是,并不是所有的 Flume 配置都需要包含这三部分,具体的配置取决于用户的需求和使用情况,这个后面再进行讨论。

Flume 配置文件编写全流程

1.查
没错,第一步就是查官方文档 —— FlumeUserGuide 根据官方文档提供的样例以及参数说明来进行配置。

2. 抄
抄就完了,官方提供了一个样例 A simple example,如下所示:

    # example.conf: A single-node Flume configuration

    # Name the components on this agent
    a1.sources = r1
    a1.sinks = k1
    a1.channels = c1

    # Describe/configure the source
    a1.sources.r1.type = netcat
    a1.sources.r1.bind = localhost
    a1.sources.r1.port = 44444

    # Describe the sink
    a1.sinks.k1.type = logger

    # Use a channel which buffers events in memory
    a1.channels.c1.type = memory
    a1.channels.c1.capacity = 1000
    a1.channels.c1.transactionCapacity = 100

    # Bind the source and sink to the channel
    a1.sources.r1.channels = c1
    a1.sinks.k1.channel = c1

这个就是 Flume 经典的案例,配置从本地 44444 端口采集数据,并将数据通过内存通道缓冲,最后将数据记录到日志文件中。几乎所有的 Flume 配置都可以通过这个模板进行更改,只是参数略有不同罢了。

看完上面的经典案例,那么就来实操一个配置文件吧,配置一个将 HTTP 数据采集到 HDFS 上的案例,并通过本地文件进行缓冲(通道)。

本文不对参数的具体作用进行说明,只讲述配置流程,如有需要,可以查阅官网进行学习。

3. 声明

首先需要进行组件名称的声明,也就是像我们写代码定义变量名一样(套模板就完事了)。

    a1.sources = r1
    a1.sinks = k1
    a1.channels = c1

其中 a1.sources = r1 代表定义了一个名称为 r1 的源数据组件,其它两个是同样的意思。我们也可以配置多个组件,例如:a1.sources = r1 r2,这样就配置了两个源数据组件。

4.Source 源配置

这个地方需要根据我们具体的业务场景来进行配置,假设当前需要采集的是 HTTP 中的数据,那么我们就可以在官网中搜索 HTTP Source。你也可以在官网页面 —— FlumeUserGuide 中搜索 Flume Sources,可以在其中找到所有 Flume 提供的 Sources 配置方案及说明。

image.png

其中加粗的部分是必填项,其它参数都有默认值,你可以根据右侧的说明进行调整。

Flume 贴心的为每个配置都提供了样例进行参考,如下所示(HTTP Source 的参考配置):

image.png

我这里配置如下:

    a1.sources.r1.type = http
    a1.sources.r1.port = 5140
    a1.sources.r1.bind = localhost

其中 r1 就是我们上面定义的源数据组件名称,其它都为参数的固定写法。

5.Sink 存储配置

同样的,我们可以在官网中搜索 HDFS Sink 或者在官网页面 —— FlumeUserGuide 中搜索 Flume Sinks,可以在其中找到所有 Flume 提供的 Sink 配置方案及说明。

image.png

找到之后,直接来看看 Flume 提供的模板:

image.png

在其基础上进行修改:

    a1.sinks.k1.type = hdfs
    a1.sinks.k1.hdfs.path = /flume/events/%Y-%m-%d/%H%M/%S
    a1.sinks.k1.hdfs.filePrefix = events-
    a1.sinks.k1.hdfs.round = true
    a1.sinks.k1.hdfs.roundValue = 10
    a1.sinks.k1.hdfs.roundUnit = minute
    a1.sinks.k1.hdfs.useLocalTimeStamp = true
    a1.sinks.k1.hdfs.fileType = CompressedStream
    a1.sinks.k1.hdfs.codeC = gzip

其中 k1 就是我们上面定义的存储组件名称,其它都为参数的固定写法。

6.Channel 通道配置

同样的,我们可以在官网页面 —— FlumeUserGuide 中搜索 Flume Channels,可以在其中找到所有 Flume 提供的 Channels 配置方案及说明。

image.png

一样的,找到之后,直接来看看 Flume 提供的模板:

image.png

我们根据模板来进行修改:

    a1.channels.c1.type = file
    a1.channels.c1.checkpointDir = /opt/software/flume/checkpoint
    a1.channels.c1.dataDirs = /opt/software/flume/data

其中 c1 就是我们上面定义的通道组件名称,其它都为参数的固定写法。

7.组装

三大组件部分编写完成后,还需要进行组装,将源(Source)和存储(Sink)与通道(Channel)进行绑定,以构建数据的流动路径。

你可以想象一个蓄水池,源是河流,通道是水管,存储是蓄水池,人们利用水管将水流引入蓄水池中,据此来进行绑定,它们才知道谁是谁。

通过组装,Flume 可以确保数据从源处接收并经过通道传输,最终进行存储(汇总)。

那么现在对我们的案例来进行组装,如下所示:

    a1.sources.r1.channels = c1
    a1.sinks.k1.channel = c1

将源和汇都绑定上通道。

测试

现在,我们整个配置文件都已经编写完成了,如下所示:

# 声明
a1.sources = r1
a1.sinks = k1
a1.channels = c1

# Source 源配置
a1.sources.r1.type = http
a1.sources.r1.port = 5140
a1.sources.r1.bind = localhost

# Sink 处理/存储配置
a1.sinks.k1.type = hdfs
a1.sinks.k1.hdfs.path = /flume/events/%Y-%m-%d/%H%M/%S
a1.sinks.k1.hdfs.filePrefix = events-
a1.sinks.k1.hdfs.round = true
a1.sinks.k1.hdfs.roundValue = 10
a1.sinks.k1.hdfs.roundUnit = minute
a1.sinks.k1.hdfs.useLocalTimeStamp = true
a1.sinks.k1.hdfs.fileType = CompressedStream
a1.sinks.k1.hdfs.codeC = gzip

# Channel 通道配置
a1.channels.c1.type = file
a1.channels.c1.checkpointDir = /opt/software/flume/checkpoint
a1.channels.c1.dataDirs = /opt/software/flume/data

# 组装/绑定
a1.sources.r1.channels = c1
a1.sinks.k1.channel = c1

将该配置文件命名为 httpToHDFS.conf,并将其存储在 $FLUME_HOME/conf 目录中,下面对该文件进行运行测试。

首先,我们在前台启动 Flume,指定刚刚配置的文件:

cd $FLUME_HOME

./bin/flume-ng agent -n a1 -c conf/ -f conf/httpToHDFS.conf -Dflume.root.logger=INFO,console

命令解析

  • ./bin/flume-ng agent: 这是启动 Flume 代理的命令。

  • -n a1-n 参数指定了代理的名称,这里指定的名称是 a1。该名称将在配置文件中使用,用于引用代理中的各个组件。

  • -c conf/-c参数指定了Flume配置文件的路径。在这个例子中,配置文件位于 conf/ 目录下。

  • -f conf/httpToHDFS.conf-f 参数指定了要使用的 Flume 配置文件的文件路径。在这个例子中,使用的配置文件名为 httpToHDFS.conf,位于 conf/ 目录下。

  • -Dflume.root.logger=INFO,console:这是设置 Flume 日志级别和日志输出方式的参数。INFO 表示日志级别为 INFO,console 表示日志将输出到控制台,可以根据需要调整日志级别和输出方式。

启动完成后如下所示:

image.png

下面我们通过其它窗口使用 curl 命令模拟发送数据到 HTTP 源:

curl -X POST -d'[{"body":"hello body"}]'  http://localhost:5140

curl -X POST -d'[{"body":"hello flume"}]'  http://localhost:5140

正常情况下,执行完命令之后 Flume 就会监听并采集到该数据了,如下所示:

image.png

我们可以通过 Hadoop 命令查看该路径下存储的内容:

hdfs dfs -text /flume/events/2024-04-02/2300/00/ev*

注意,该路径并不是固定的,请修改成你自己的路径。

image.png

可以看到,Flume 已经成功将数据采集并存储到 HDFS 上了。

灵魂拷问,现在你会编写 Flume 配置文件了吗? qwq

相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
相关文章
|
6月前
|
消息中间件 存储 分布式计算
【Flume】Flume配置文件详细分析
【4月更文挑战第4天】【Flume】Flume配置文件详细分析
|
数据采集 缓存 JSON
网站流量日志 Flume 收集--配置文件编写和实操| 学习笔记
快速学习网站流量日志 Flume 收集--配置文件编写和实操
网站流量日志 Flume 收集--配置文件编写和实操| 学习笔记
|
缓存 分布式计算 Hadoop
Flume安装部署,采集方案配置文件编写案例,启动agent采集数据
1.2 Flume实战案例 1.2.1 Flume的安装部署 1、Flume的安装非常简单,只需要解压即可,当然,前提是已有hadoop环境 上传安装包到数据源所在节点上 然后解压 tar -zxvf apache-flume-1.6.0-bin.tar.gz,最终解压到的位置是:/home/tuzq/software/apache-flume-1.6.0-bi
2651 0
|
6月前
|
存储 分布式计算 监控
【Flume】Flume 监听日志文件案例分析
【4月更文挑战第4天】【Flume】Flume 监听日志文件案例分析
|
6月前
|
存储 运维 监控
【Flume】flume 日志管理中的应用
【4月更文挑战第4天】【Flume】flume 日志管理中的应用
|
消息中间件 数据采集 SQL
1、电商数仓(用户行为采集平台)数据仓库概念、用户行为日志、业务数据、模拟数据、用户行为数据采集模块、日志采集Flume(一)
1、电商数仓(用户行为采集平台)数据仓库概念、用户行为日志、业务数据、模拟数据、用户行为数据采集模块、日志采集Flume(一)
|
3月前
|
存储 数据采集 数据处理
【Flume拓扑揭秘】掌握Flume的四大常用结构,构建强大的日志收集系统!
【8月更文挑战第24天】Apache Flume是一个强大的工具,专为大规模日志数据的收集、聚合及传输设计。其核心架构包括源(Source)、通道(Channel)与接收器(Sink)。Flume支持多样化的拓扑结构以适应不同需求,包括单层、扇入(Fan-in)、扇出(Fan-out)及复杂多层拓扑。单层拓扑简单直观,适用于单一数据流场景;扇入结构集中处理多源头数据;扇出结构则实现数据多目的地分发;复杂多层拓扑提供高度灵活性,适合多层次数据处理。通过灵活配置,Flume能够高效构建各种规模的数据收集系统。
57 0
|
26天前
|
SQL 分布式计算 Hadoop
Hadoop-19 Flume Agent批量采集数据到HDFS集群 监听Hive的日志 操作则把记录写入到HDFS 方便后续分析
Hadoop-19 Flume Agent批量采集数据到HDFS集群 监听Hive的日志 操作则把记录写入到HDFS 方便后续分析
39 2
|
26天前
|
存储 数据采集 分布式计算
Hadoop-17 Flume 介绍与环境配置 实机云服务器测试 分布式日志信息收集 海量数据 实时采集引擎 Source Channel Sink 串行复制负载均衡
Hadoop-17 Flume 介绍与环境配置 实机云服务器测试 分布式日志信息收集 海量数据 实时采集引擎 Source Channel Sink 串行复制负载均衡
36 1