一、Flume的简介

Flume是一种分布式,可靠且可用的服务,用于有效地收集,聚合和移动大量日志数据。Apache Flume的使用不仅限于日志数据聚合。由于数据源是可定制的,因此Flume可用于传输大量事件数据,包括但不限于网络流量数据,社交媒体生成的数据,电子邮件消息以及几乎所有可能的数据源。

它具有基于流数据流的简单灵活的体系结构。它具有可调整的可靠性机制以及许多故障转移和恢复机制,具有强大的功能和容错能力。

简单说就是读取磁盘数据,写到HDFS,基本结构如下图:

flume版本支持 flume api_Source

二、Flume的重要组件

说到Flume的架构,先来了解下Flume的核心组件吧

1、Agent

一个JVM进程,由Source、Channel、Sink组成

2、Source

采集数据,将采集的数据传给channel
(1)Spooling Directory Source
type@spooldir.
监控指定目录,一旦出现新的文件,就会解析新文件的内容,传输到定义的sink中
(2)Avro Source
type@avro
可以监听IP和端口,并不一定是本机的IP,可以监听其他机器的IP和port,支持IP过滤
(3)Kafka Source
从Kafka指定的topic中读取数据
Type@org.apache.flume.source.kafka.KafkaSource
(4)Taidir Source
type@TAILDIR.
可监控多个文件,一旦文件内有新写入的数据,就会将其写入到指定的sink内,不适用于Windows系统
(5)Thrift Source
与Avro类似,但不支持IP过滤

3、Channel

一个队列,存储数据,Channel中是一个个Event,Event是传输的最小单元
是Source和Sink之间的缓存区,接受Source和Sink以不同的速率写入和读取操作
(1)Memory Channel
Event保存在Java堆中,允许数据小量丢失
(2)Kafka Channel
将数据临时缓存在Kafka中
(3)File Channel
Event保存在本地文件中,可靠性高,吞吐量低于Memory Channel
(4)Spillable Memory Channel
event存放在内存和磁盘上,内存作为主要存储,当内存达到一定临界点的时候会溢写到磁盘上
(5)JDBC Channel
Event存放于一个支持JDBC连接的数据库中

4、Sink

从Channel中获取数据,传到目标位置
(1)HDFS Sink
将事件写入到Hadoop分布式文件系统HDFS中
(2)Hive Sink
将包含分割文本或者JSON数据的events直接传送到Hive表或分区中
Hive是一个数据仓库工具,能将结构化的数据映射为一张数据库表
(3)Avro Sink
实现多级流动 和 扇出流(1到多) 扇入流(多到1) 的基础
(4)File Roll Sink
在本地文件系统中存储事件。每隔指定时长生成文件保存这段时间内收集到的日志信息
(5)Kafka Sink
将数据发布到Kafka上
(6)Http Sink
从channel获取events,并使用HTTP POST请求发送这些events到远程服务

三、Flume的架构

1、Setting multi-agent flow

flume版本支持 flume api_Flume_02


顺序连接多个flume

桥接过多的flume,网速会慢,由于是串行的,一个宕机,影响整体

2、consolidation

flume版本支持 flume api_Flume_03


多个flame传到一个集中的flame,由这个集中的flume上传到目标位置

3、multiplexing the flow

flume版本支持 flume api_Flume_04

将数据复制到多个channel中,每个channel中有相同的数据,sink选择不同的目的地,实现将事件流向一个或多个目的地