Apache Flume简单入门

Apache Flume 是一个分布式、可靠且可用的系统,用于收集、聚合和移动大量日志数据。本文介绍了Flume的基本概念,包括事件、Source、Channel和Slink,详细讲解了Flume的安装过程和一个简单的单节点部署配置示例。

1. Apache Flume 概要

Apache Flume 是一个分布式,可靠且可用的系统,用于有效地从许多不同的源收集、聚合和移动大量日志数据到一个集中式的数据存储区。
Flume 的使用不只限于日志数据。因为数据源可以定制,flume 可以被用来传输大量事件数据,这些数据不仅仅包括网络通讯数据、社交媒体产生的数据、电子邮件信息等等。

2. 架构

一个 Flume 事件被定义为一个数据流单元。Flume agent 其实是一个 JVM 进程,该进程中包含完成任务所需要的各个组件,其中最核心的三个组件是 Source、Chanel 以及 Slink。
图片来自互联网
Source 之前的数据是由外部数据源(如日志)传递给 Flume 的事件,具体格式有接收的 Flume Source 来确定。
Channel 可以理解为缓存区,用来保存从 Source 那拿到的数据,直到 Flume slink 将数据消费。file chanel 是一个例子,它将数据保存在文件系统中(当然也可以将数据放在内存中)。
Slink 从 channel 消费完数据就会将数据从 channel 中清除,随后将数据放到外部存储系统例如 HDFS (使用 Flume HDFS sink)或发送到其他 Flume agent 的 source 中。不管是 Source 还是 Slink 都是异步发送和消费数据。

处理一组 [Source -> Channel -> Slink] 的一个单元叫 Agent,每个 Agent 都要有一个唯一名称。

注意:上面图片中,方框左边表示数据来源,右边表示数据接收端,不限于图中表示的两种。

3. 安装 Flume

开始实践之前要配置 Java 的运行环境,因为 Flume 依赖Java,然后手动下载指定版本的 Flume:

wget --no-check-certificate --no-cookies --header "Cookie: oraclelicense=accept-securebackup-cookie"  http://download.oracle.com/otn-pub/java/jdk/8u131-b11/d54c1d3a095b4ff2b6607d096fa80163/jdk-8u131-linux-x64.tar.gz           # 这里下载版本仅供参考

wget http://apache.fayea.com/flume/1.7.0/apache-flume-1.7.0-bin.tar.gz

然后解压到 /usr/local/目录中(当然可以是任意目录下),然后进入到 conf目录中,新增一个 flume-conf.properties文件,里面准备写具体的配置内容。

4. 简单实践

一个 Flume Agent 配置文件中可以配置一个或多个 agent,每个 agent 需要指定其 source、channel、slink 的属性。

流中的每一个组件(source、channel、slink)都有自己的名称、类型以及一系列配置属性,不同的数据源和 slink 类型有不同的属性,请自行查找对应最优配置。所有这些关于各个组件的属性需要在配置文件中进行指定。

下面展示一个简单的配置示例,该示例为 flume 单节点部署的配置方式。

# flume-conf.properties: 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

看看这个配置文件,我们可以发现这个 agent 的名称是 a1。其中该 agent 的 source 监听 44444 端口。channel 采用内存模式,而 slink 直接输出数据到 控制台上(logger)。配置文件指定了各个组件的名称,并描述了它们的类型以及其他属性。当然,一个配置文件可以配置多个 agent 属性,当希望运行指定 agent 进程时,我们需要在命令行中显示的给出该 agent 的名称:

$ bin/flume-ng agent --conf conf --conf-file flume-conf.properties --name a1 -Dflume.root.logger=INFO,console

在这个例子中,注意一下有个--conf conf参数,这是指定了conf目录。本例中,我们传递一个 Java 选项来强制 Flume 将日志输出到控制台。我们可以远程 telnet 访问 44444 端口来向 agent 发送数据:

$ telnet localhost 44444
Trying 127.0.0.1...
Connected to localhost.localdomain (127.0.0.1).
Escape character is '^]'.
Hello Flume!
OK

agent 进程的控制台将会打印通过 telnet 发送的数据:

2019-08-11 17:31:33,400 (SinkRunner-PollingRunner-DefaultSinkProcessor) [INFO - org.apache.flume.sink.LoggerSink.process(LoggerSink.java:95)] Event: { headers:{} body: 48 65 6C 6C 6F 20 77 6F 72 6C 64 0D             Hello Flume!. }

完成这一步,已经成功地配置以及部署一个 flume agent。

大部分时候flume是要后台执行的,参考命令:

nohup bin/flume-ng agent --conf conf -n agent -f conf/flume-conf.properties 2>&1 >/dev/null &
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值