Flume:快速了解Flume

Flume是一个高可用,高可靠,分布式的海量日志采集,聚合和传输的系统,能够有效地收集、聚合、移动大量的日志数据。
其实通俗一点来说就是Flume是一个很靠谱,很方便、很强的日志采集工具。Flume目前是大数据领域数据采集最常用的一个框架。
基础架构

Agent就是我们使用Flume启动的一个代理,它是一个持续传输数据的服务;数据在Agent内部的这些组件之间传输的基本单位是Event。
Event:传输单元,Flume数据传输的基本单元,以Event的形式将数据从源头送至目的地。Event由Header和Body两部分组成,Header用来存放该event的一些属性,为K-V结构,Body用来存放该条数据,形式为字节数组。

Agent是由Source、Channel、Sink这三大组件组成的,这就是Flume中的三大核心组件。
1、Source
Source:是数据源,通过Source组件可以指定让Flume读取哪里的数据,然后将数据传递给后面的Channel。Flume内置支持读取很多种数据源,基于文件、基于目录、基于TCP\UDP端口、基于HTTP、Kafka的等等、当然了,如果这里没有你喜欢的数据源,也是可以支持自定义的。
Source的组件有:Exec Source(用于文件监控)、NetCat TCP/UDP Source(采集指定端口的数据)、Spooling Directory Source(采集文件夹里新增的文件)、Kafka Source(从Kafka消息队列中采集数据),其中最常用组件是Exec Sourc和Kafka Source,可以满足大部分的数据采集需求。
电商数仓项目中使用的是Taildir Source。
2、Channel
Channel:是临时存储数据的,Source会把读取到的数据临时存储到Channel中,支持的类型有很多:内存、文件、内存+文件、JDBC等。Channel常用的组件有:
1)Memory Channel:使用内存作为数据的存储。
2)File Channel:使用文件来作为数据的存储。
3)Spillable Memory Channel:使用内存和文件作为数据的存储,先把数据存储到内存中,如果内存中数据达到阈值再flush到文件中。
3、Sink
Sink:是负责从Channel中读取数据的,最终将数据写出去,写到指定的目的地中,表现的形式有:打印到控制台、HDFS、kafka等,常用的组件有:
1)Logger Sink:将数据作为日志处理,可以选择打印到控制台或者写到文件中,这个主要在测试的时候使用。
2)HDFS Sink:将数据传输到HDFS中,这个是比较常见的,主要针对离线计算的场景。
3)Kafka Sink:将数据发送到kafka消息队列中,这个也是比较常见的,主要针对实时计算场景,数据不落盘,实时传输,最后使用实时计算框架直接处理。
基本思想和特点
Flume 采用了插拔式软件架构,所有组件均是可插拔的,用户可以根据自己的需求定制每个组件。Flume 本质上我理解是一个中间件。
Flume 主要具有以下几个特点:
1、良好的扩展性:Flume 的架构是完全分布式的,没有任何中心化组件,使得其非常容易扩展。
2、高度定制化:采用插拔式架构,各组件插拔式配置,用户可以很容易地根据需求自由定义。
3、良好的可靠性:Flume 内置了事务支持,能保证发送的每条数据能够被下一条收到而不丢失。
4、可恢复性:依赖于其核心组件channel,选择缓存类型为FileChannel,事件可持久化到本地文件系统中。
更多推荐

所有评论(0)