Flume 理论

1. Flume 简介

Flume 是一个分布式的海量日志采集,聚合,转移工具。

大数据常用数据处理框架

graph LR
实时流数据采集--> flume,kafka
实时流数据处理--> spark,storm
实时数据查询处理--> impala
批数据导入导出-->Sqoop
批数据查询处理--> hive

这里只是给flume一个定位,清楚flume适合做哪方面的数据处理。

即:flume是基于数据流的组件来实现分布式的数据采集

flume使用简单,仅需写一个配置文件,即可完成一个分布式,高可用,可靠的实时数据流采集任务。

2.数据流模型

Data Flow Model

重要概念:

  • 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

你可能感兴趣的:(Flume 理论)