一、Flume简介
1.1 Flume概述
Flume是一个分布式、高可用、可靠的海量日志聚合的系统。支持在系统中定制各类数据发送方,用于收集数据。同时,Flume通过对数据进行简单处理,写到各种数据接收方。
1.2 Flume使用场景
线上数据无法直接向kafka写数据,这时候就需要Flume这样的系统帮你去传输。
1.3 Flume的体系架构
![](https://i-blog.csdnimg.cn/blog_migrate/0858849f9d733273387d71624187be5b.png)
比较核心的组件
client:client生产数据,运行在一个独立的线程
Event:一个数据单元,消息头和消息体组成(Events可以是日志记录、 avro 对象等。)
Flow:Event从源头到目的地点的迁移的抽象。
Agent:是Flume运行的最小单位,是一个完整的数据收集工具,含有三个组件,分别是:
source、channel、sink。通过这些组件event可以从一个地方流向另一个地方
source:数据的输入方式,它是数据的收集端,负责将数据捕获后进行特殊的格式化,将数据封装到event里,然后将event推入channel中。Flume中内置了很多source支持avro、log4j,syslog和http。可以让应用程序可以直接和source打交道,如果内置source无法满足需求,flume害可以自定义source。
举几个常用的:
NetCat Source
:绑定的端口(
tcp
、
udp
),将流经端口的每一个文本行数据作为
Event
输入
Avro Source
:监听一个
avro
服务端口,采集
Avro
数据序列化后的数据
Exec Source
:于
Unix
的
command
在标准输出上采集数据
Spooling Directory Source
:监听一个文件夹里的文件的新增,如果有则采集作为
source
。
![](https://i-blog.csdnimg.cn/blog_migrate/af42dae2b1175c42fb4d61799390c983.png)
channel:用来缓存从source传输过来的数据,并形成一个个event,等待sink来拿。它相当于一个缓存区,可以将事件暂存到内存中也可以持久化到磁盘上直到sink处理完该事件。
举几个常用的channel:
Memory Channel
使用内存作为数据的存储。
File Channel
使用文件作为数据的存储
Spillable Memory Channel
使用内存作为
channel
超过了阀值就存在文件中
sink:数据的输出方式将channel整理好的一个个event,传送到指定的地方
举几个比较常用的
HDFS Sink
:将数据传输到
hdfs
集群中
ogger Sink
将数据作为日志处理(根据
flume
中的设置的日志方式来显示)
Avro Sink
:数据被转换成
Avro Event
,然后发送到指定的服务端口上。
File Roll Sink
:数据发送到本地文件
interceptor
当我们需要对数据进行过滤时,除了我们在
Source
、
Channel
和
Sink
进行代码修改之外,
Flume
为我们提供了拦截器,拦截器也是
chain
形式的,当我们为source指定好拦截器的时候,我们的拦截器会得到event,根据需求我们可以对event进行保留还是抛弃,被抛弃的event不会进入到channel中。
Timestamp Interceptor
时间戳拦截器 在
header
里加入
key
为
timestamp
,
value
为当前时
间
Host Interceptor
主机名或者
ip
拦截器,在
header
里加入
ip
或者主机名
Static Interceptor
静态拦截器,是在
header
里加入固定的
key
和
value
。
1.4 Flume特性
Flume允许用户构建多跳流程,其中事件在到达最终目的地的时候会通过多个代理传播。它还允许扇入扇出流,上下文路由和备份路由。
为了使数据跨越多个代理或跃点流动,前一个代理的接收器和当前跃点的源必须为avro类型,接收器指向源的主机名和端口
![](https://i-blog.csdnimg.cn/blog_migrate/413047eead4ec910e19f710393f53069.png)
还可以将多个数据经过同一个代理跃点流动,方法是为多个第一层代理配置一个avro接收器,它们均指向单个代理跃点的avro源,第二层代理上的此源将接收到的事件合并到一个通道中,该通道由接收器消耗到其最终的目的地。
![](https://i-blog.csdnimg.cn/blog_migrate/c6c7345556cda21001cce90ce910441b.png)
Flume支持将事件流复用到一个或多个目的地。这是通过定义一种流多路复用器来实现的,该流多路复用器可以将事件选择性的或复制性的路由到一个或多个通道。
1.5 Flume优点
1. 当收集数据的速度超过将写入数据的时候,也就是当收集信息遇到峰值时,这时候收集的信息非常 大,甚至超过了系统的写入数据能力,这时候,
Flume会在数据生产者和数据收容器间做出调整, 保证其能够在两者之间提供平稳的数据。
2. Flume
的管道是基于事务,保证了数据在传送和接收时的一致性
.
3. Flume是可靠的,容错性高的,可升级的,易管理的,并且可定制的(可以根据生产需要自行定义 一个数据来源端或者终点端)。
4.
除了日志信息,
Flume同时也可以用来接入收集规模宏大的社交网络节点事件数据,比如Facebook
、
Twitter
、电商网站如亚马逊等。
5.
支持多路径流量,多管道接入流量,多管道接出流量,上下文路由等。