Flume是什么

Flume是一个分布式的高可靠,可扩展的数据采集框架,在大数据工程中我们常常需要日志进行分析获取商业价值而Flume就是采集多个不同的数据源,交给数据处理程序同一执行。

Flume的架构

  • 基础架构

clipboard.png


Flume event:一个数据集,是Flume传输数据的基本单位
Source:接收来自外部的FLume event,有很多不同的类型    
Channel:存储Flume event直到被Sink消耗
Sink:消耗Channel中的Flume event,并将其存储在外部设备中或者传送给另一个agent,也有很多不同的类型。

一个agent由source,sink,channel三部分组成,source可接受外部数据源或另一个agent的sink,sink可向另一个agent的source或外部存储系统传递数据如HDFS。

  • 扩展架构

clipboard.png

两个agent之间的传输


clipboard.png

多个agent的合并


clipboard.png

一个agent设置多个channel,不同channel向不同地方传递数据

如何使用Flume

由上面我们知道Flume的核心就是接收哪的数据和向哪传输数据,而这些信息就写在Flume的配置文件中,因此使用Flume的核心就是配置文件的书写

conf下的lume-conf.properties.template文件
# 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


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

可以看到配置分为两步,分别定义agent的sink,source,channel类型,将sink,source,channel三个组件串连起来。使用的效果就是控制台(logger)实时输出netcat输入的信息。

启动命令:

$ bin/flume-ng agent -n $agent_name -c conf -f conf/flume-conf.properties.template

至此Flume的基本流程我们已经清楚,实际开发中我们要根据具体需求选择Flume的架构以及各个Flume source和sink的类型。

Flume官方文档


诗和远方丶
24 声望4 粉丝

每篇都是原创,拒绝复制粘贴