大数据学习(18)—— Flume介绍

https://www.cnblogs.com/wangtao1993/p/6404232.html

https://www.cnblogs.com/duoduotouhenying/p/10210000.html

老规矩,学习新东西先上官网瞅瞅Apache Flume

Flume是什么

Flume是一个分布式、可靠的大规模高效日志收集、汇聚和传输的这么一个服务。它的架构基于流式数据,配置简单灵活。它具备可调节的可靠性机制和很多失败恢复机制,这让它具有健壮性和容错性。它采用简单可扩展的数据模型为在线分析应用提供支持。

Flume架构

大数据学习(18)—— Flume介绍

没见过这么简单的架构图,这说明了flume用起来并不复杂。它通过Source从数据源把日志拿过来放到Channel里面存一下,再通过sink写入到持久化存储里。

咋一看,这玩意跟消息队列的生产者消费者差不多,中间是个队列。网上确实也有不少拿Flume跟Kafka对比的文章,它们还是有区别的。Kafka可以参与到Flume的每一个组件里,Flume+Kafka是一个流行的组合。

玩大数据的这些技术,内存要尽量大一点,Channel用内存存储比较常见。

Flume从数据源取数写入Channel是一个事务,从Channel取数通过Sink写到目的存储又是一个事务。来个详细一点的图吧,拿来主义,从网上找的。

大数据学习(18)—— Flume介绍

Agent

服务起来后,它是一个JVM进程,包含了Source、Channel和Sink,是Flume传输数据的基本单元。

Source

Source是负责接收数据到Flume Agent的组件。Source组件可以处理非常多的数据源。看官网目录。

大数据学习(18)—— Flume介绍

Channel 

Channel是位于Source和Sink之间的缓冲区。因此,Channel允许Source和Sink运作在不同的速率上。Channel是线程安全的,可以同时处理几个Source的写入操作和几个Sink的读取操作。

Flume自带两种Channel:Memory Channel和File Channel。

Memory Channel是内存中的队列。Memory Channel在不需要关心数据丢失的情景下适用。如果需要关心数据丢失,那么Memory Channel就不应该使用,因为程序死亡、机器宕机或者重启都会导致数据丢失。

File Channel将所有事件写到磁盘,因此在程序关闭或机器宕机的情况下不会丢失数据,但是效率很低。

Channel种类要少一点。

 大数据学习(18)—— Flume介绍

Sink

Sink不断地轮询Channel中的事件且批量地移除它们,并将这些事件批量写入到存储或索引系统、或者被发送到另一个Flume Agent。

Sink是完全事务性的。在从Channel批量删除数据之前,每个Sink用Channel启动一个事务。批量事件一旦成功写出到存储系统或下一个Flume Agent,Sink就利用Channel提交事务。事务一旦被提交,该Channel从自己的内部缓冲区删除事件。

Sink的种类也比较少。

大数据学习(18)—— Flume介绍

Event

官网原话A Flume event is defined as a unit of data flow having a byte payload and an optional set of string attributes.它是一个数据流,包含有效荷载和可选字符串属性。

它是最小传输单元,以事件的形式将数据从源头送至目的地。  Event由可选的header和载有数据的一个byte array 构成。Header是容纳了key-value字符串对的HashMap。

大数据学习(18)—— Flume介绍

Flume用在哪儿

大数据学习(18)—— Flume介绍

这是Flume的一个典型应用场景。从数据源抽取数据,原封不动地存储到HDFS,经过ETL处理后存入HBase,用Hive做完分析后,通过Sqoop导入关系型数据库来展示。

上一篇:22.Flume监控、自定义组件、面试题


下一篇:大数据开发-Flink-数据流DataStream和DataSet