Flume入门
Posted Hadoop生态圈
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Flume入门相关的知识,希望对你有一定的参考价值。
Flume是一个分布式、可靠、和高可用的海量日志聚合的系统,支持在系统中定制各类数据发送方,用于收集数据;同时,Flume提供对数据进行简单处理,并写到各种数据接受方(可定制)的能力。一个独立的Flume进程称之为Agent,包含组件Source、Channel、Sink。
Flume 的内部实现如下图所示:
Event:Event是Flume数据传输的基本单元。Flume以Event的形式将数据从源头传送到最终目的。
Source:Source负责接收events或通过特殊机制产生events,并将events批量的放到一个或多个Channels。Flume支持文件、消息流等数据源,并在Source部件中将接收到的数据转换为一个Event。例如Flume支持监听文件目录(spooling directory source),当监听的目录下新到一个文件,Flume就会将其作为数据源通过Source转换为Event实时的传输走。
对现有程序改动最小的使用方式是使用是直接读取程序原来记录的日志文件,基本可以实现无缝接入,不需要对现有程序进行任何改动。
对于直接读取文件Source,有两种方式:
ExecSource:以运行Linux命令的方式,持续的输出最新的数据,如tail -F 文件名指令,在这种方式下,取的文件名必须是指定的。
SpoolSource:是监测配置的目录下新增的文件,并将文件中的数据读取出来。
需要注意两点:
1、拷贝到spool目录下的文件不可以再打开编辑。
2、spool目录下不可包含相应的子目录。
在实际使用的过程中,可以结合log4j使用,使用log4j的时候,将log4j的文件分割机制设为1分钟一次,将文件拷贝到spool的监控目录。log4j有一个TimeRolling的插件,可以把log4j分割的文件到spool目录。基本实现了实时的监控。
Flume在传完文件之后,将会修改文件的后缀,变为.COMPLETED(后缀也可以在配置文件中灵活指定)
ExecSource,SpoolSource对比:
ExecSource可以实现对日志的实时收集,但是存在Flume不运行或者指令执行出错时,将无法收集到日志数据,无法何证日志数据的完整性。SpoolSource虽然无法实现实时的收集数据,但是可以使用以分钟的方式分割文件,趋近于实时。如果应用无法实现以分钟切割日志文件的话,可以两种收集方式结合使用。
Channel:Channel位于Source和Sink之间,用于缓存进来的events,当Sink成功地将events发送到下一跳的channel或最终目的,events从Channel移除。目前Flume支持3种channelmemory channel:消息放在内存中,提供高吞吐,但不提供可靠性;可能丢失数据; filechannel:对数据持久化;但是配置较为麻烦,需要配置数据目录和checkpoint目录;不同的file channel均需要配置一个checkpoint 目录; jdbc channel:内置的derby数据库,对event进行了持久化,提供高可靠性;未来取代同样具有持久特性的file channel
Channel有多种方式:
有MemoryChannel,JDBCChannel,MemoryRecoverChannel,FileChannel。MemoryChannel可以实现高速的吞吐,但是无法保证数据的完整性。MemoryRecoverChannel在官方文档的建议上已经建义使用FileChannel来替换。FileChannel保证数据的完整性与一致性。在具体配置不现的FileChannel时,建议FileChannel设置的目录和程序日志文件保存的目录设成不同的磁盘,以便提高效率。
Sink:Sink负责将events传输到下一跳或最终目的。Sink支持将数据写入到离线存储如HDFS、消息系统如Kafka等。
Sink在设置存储数据时,可以向文件系统中,数据库中,hadoop中储数据,在日志数据较少时,可以将数据存储在文件系中,并且设定一定的时间间隔保存数据。在日志数据较多时,可以将相应的日志数据存储到Hadoop中,便于日后进行相应的数据分析。
Interceptor:用于Source的一组拦截器,按照预设的顺序在必要地方对events进行过滤和自定义的处理逻辑实现。
ChannelSelector: 允许Source基于预设的规则,从所有Channel中,选择一个或多个Channel。例如根据话单中的漫游字段,可以将原始话单放到不同的Channel,这样Sink就可以将数据送到不同的目标系统中。
Channel Selector支持两种选择器: 复制Replicating: 一个event被复制到多个channel; 复用Multiplexing: event被路由到特定的channel,即非复制模式。
以上是关于Flume入门的主要内容,如果未能解决你的问题,请参考以下文章