研读《基于Hadoop的海量业务数据分析平台的设计与实现》----flume一章学习小结

flume简单介绍

flume把收集的这些大量的日志数据传输给指定目标的数据仓库中,flume支持多种不同的数据源,比如控制台,文本文件,系统日志文件等等,同时也支持多种目标的数据存储系统,比如数据库系统,文本文件,分布式文件系统等等。

flume的传输方式是以数据流做为传输的载体。其本质就是做为一个数据传输的通道,把数据从初始端传输到目的端等,如下图为数据流模型。


agent是flume的主要组成部分,是一个独立的进程,它能够接收数据并且将数据传送给指定的位置。一个agent包含source、 channel,sink三个重要的部分,source是接收数据的,是数据传输的开端,channel是传输数据的通道,接收来自source端的数据并且进行短暂的存储,等待sink进程的获取,channel可以为内存方式,也可以为JDBC方式等等,sink拿到channel的数据之后会把数据传输到指定的目的地文件系统或者下一个source进行数据的传输。,然后会移除channel中的相应数据,channel支持source和sink两种数据交换模式,类似于经典的生产者----消费者模式。source做为生产者生产数据,channel做为source生产的产品存储的仓库,而sink做为消费者,只要channel有产品,sink就会消费,这能够合理的,有效的利用系统资源。

flume支持一个source传输给多个channel,数据最终到达目的地数据传输模式。


flume实现数据的聚合,能够把多个source汇总到一个channel,比如下图所示


数据聚合流程

flume这种通过agent进行数据传输的方式保证了数据的一致性,数据从一个agent传递给下一个agent的时候,flume会启动两个进程,前一个agent的sink负责把数据写入到下一个agent的source端口,后一个agent接收到数据以后进行下一步的传输,后一个agent在事务提交之后会给前一个agent返回一个成功接收的信息,前一个agent接收到后一个agent的成功信息以后才会提交自己的事务,这种方式确保了数据才传输的过程中不会丢失,这种数据传输机制也是flume失效以后数据得以恢复的基础,当数据在多个agent之间传输错误时,前一个agent会缓存这些数据,当后面的agent恢复以后,可以继续传输这些数据,但是这种缓存是被动的,当agent长时间没有恢复,最终很有可能导致数据的丢失,下图为传输成功的时序图。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章