1. Flume 简介
Flume 是一个分布式的海量日志采集,聚合,转移工具。
大数据常用数据处理框架
graph LR
实时流数据采集--> flume,kafka
实时流数据处理--> spark,storm
实时数据查询处理--> impala
批数据导入导出-->Sqoop
批数据查询处理--> hive
这里只是给flume一个定位,清楚flume适合做哪方面的数据处理。
即:flume是基于数据流的组件来实现分布式的数据采集
flume使用简单,仅需写一个配置文件,即可完成一个分布式,高可用,可靠的实时数据流采集任务。
2.数据流模型
重要概念:
- event:被定义为flume数据传输的基本单元,有消息头和消息体组成。
- flow:指数据从源头到目的地的数据迁移过程。
- Agent:一个独立的Flume进程,包含组件Source,Channel,Sink.(Agent使用JVM运行flume,每台机器运行一个agent,但可以在一个agent中包含多个sources和sinks)
- Source:数据搜集组件。(source从client收集数据,传递给Channel)
- Channel:连接source和Sink,类似一个队列
- Sink:从Channel 中读取并移除event,将数据写到下一个目标源,可以是下一个source,也可以是HDFS。
Flume运行的核心是Agent.Flume以agent为最小的独立运行单位。一个agent包含三个核心组件,source,channel,sink.
2.1 Source
- Source 负责数据的收集,将数据捕捉后进行处理,封装成event,传递给Channel。Flume提供了很多内置的source,支持Avro,log4j,syslog和http post,还支持自定义Source。
这里主要看下Avro,Spooling,Netcat,kafka
Source类型 | 说明 |
---|---|
Avro | 支持avro 协议 |
Spooling | 监听本地文件夹,把新增的文件采集到flume |
netcat | 从网络端口接受文本数据(多用于测试调试) |
kafka | 用于从kafka中读取数据 |
2.2 Channel
- Channel 是连接Source和Sink的组件,可以看做是一个数据的缓冲区,可以将数据暂存到内存中也可以持久化到本地磁盘上,直到Sink处理完该事件。比较常用的是Memory和File 两种类型的Channel.
Channel类型 | 说明 |
---|---|
Memory | Event 数据存储在内存中 |
File | Event数据存储在磁盘文件中 |
2.3 Sink
- Sink从Channel中取出event,然后将数据发送到别处,可以是另一个agent的Source,或HDFS。
Sink 类型 | 说明 |
---|---|
logger | 把数据输出成logger日志(测试调试) |
hdfs | 把数据写入hdfs |
avro | 发送到此接收器的flume event将转化为avro event 并发送至配置的主机名:端口号 |
kafka | 将数据发送至kafka |