一.Flume架构
flume是通过flume agent进行数据的采集、传送工作的。Flume agent可以理解为flume中的一个基本单元,它包含source、channel、sink三个部分。
Source用于数据采集工作,将采集到的数据传送到channel中。
Channel是一个通道,连接source和sink,用于数据的传送。
Sink用来消费channel中的数据,可以将数据持久化或者将数据传送给另一个source。
二.Flume Agent
FlumeAgent包含三个部分,Source、Channel和Sink。
1.Source
Agent Source可以有很多种类,比如Avro Source、Thrift Source、Exec Source、Kafka Source、Http Source,以及自定义Source等。可以根据不同的场景选用合适的Source。
2.Channel
Channel同样有很多的种类,比如Memory Channel、JDBC Channel、Kafka Channel、File Channel等。同样也可以自定义Channel。
3.Sink
Sink也是有很多种类,包括HDFS Sink、Hive Sink、Logger Sink、Avro Sink、Kafka Sink、Http Sink、ElasticSearch Sink等等,同样可以根据需要自定义Sink。
三.如何自定义Source
首先创建一个java工程,引入flume依赖包。
<dependency>
<groupId>org.apache.flume</groupId>
<artifactId>flume-ng-core</artifactId>
<version>1.8.0</version>
</dependency>
<dependency>
<groupId>org.apache.flume</groupId>
<artifactId>flume-ng-configuration</artifactId>
<version>1.8.0</version>
</dependency>
<dependency>
<groupId>org.apache.flume</groupId>
<artifactId>flume-ng-sdk</artifactId>
<version>1.8.0</version>
</dependency>
然后创建java类,继承AbstractSource、实现Configurable、PollableSource接口。
PollableSource接口代表该Source是轮询拉取类型。我们也可以创建事件驱动类型的Source,实现EventDriveSource即可。两者的区别在于PollableSource是通过线程不断去调用process方法,主动拉取消息,而EventDrivenSource是需要触发一个调用机制,即被动等待。实现Configurable接口,以便在项目中初始化某些配置用的。
然后将我们打的jar包放到flume的lib目录下,如果有依赖jar包,也需要将依赖包放在lib目录下,如果有配置文件,需要在flume的bin目录中将配置文件或文件夹放进去,因为我们flume的启动入口就是bin目录下面的flume-ng文件。
接下来编写flume配置文件。将source类型定义为我们自定义的source。如下:
# 指定Agent的组件名称
a1.sources = r1
a1.sinks = k1
a1.channels = c1
# 指定Flume source(要监听的路径)
a1.sources.r1.type = com.cloudwise.bd.flume.source.MySource
# 指定Flume sink
a1.sinks.k1.type = file_roll
a1.sinks.k1.sink.directory = /Users/aladdin/flume-test/flume-source
# 指定Flume channel
a1.channels.c1.type = memory
a1.channels.c1.capacity = 1000
a1.channels.c1.transactionCapacity = 100
a1.channels.c1.byteCapacityBufferPercentage = 20
a1.channels.c1.byteCapacity = 800000
# 绑定source和sink到channel上
a1.sources.r1.channels = c1
a1.sinks.k1.channel = c1
然后就可以启动flume程序了。进入flume目录,然后执行以下命令:
bin/flume-ng agent –c conf –f conf/test-mysource.conf –n a1
agent 代表的是我们要创建一个flume agent。
-c 用于指定配置文件目录
-f 指定使用的配置文件
-n 是启动的agent的名称,需要和配置文件中的agent名称一致