Flume 初识

来源:互联网 发布:变色龙mac引导下载 编辑:程序博客网 时间:2024/05/21 07:53

Flume是什么?

Flume是一个分布式、可靠的、高可用的、适合海量数据的日志收集系统,用于收集、聚合和移动来自多个不同数据源的大量日志数据到一个集中存储中。

工作机制

它是怎么做到把多个不同数据源的数据传输到另一个集中存储中的呢?

首先来看下Flume的 source—channel—sink组合,如下图:



运行Flume的核心是需要启动一个Agent,它是一个长时间运行的Java进程,每个Agent都有三个组件:Source、Channel、Sink。其中Source监控外部源(某一目录)的数据变化,如果有变化,就会产生Event,并将Event发送给Channel,然后Channel会临时存储Event,直到它被转发到Sink,然后由Sink负责将数据(Event)发送到目的地(上图的console,也可能为一个Agent)。

从整个数据传输过程来看, 流动的是Event,它是传输数据的基本单位。Event从Source流向Channel,再到Sink,最后被写入目的地。Event 其实是一个Byte数组,它包含可选的header部分和二进制的body部分,其中header部分包含了数据的路由规则,即流向。

核心组件:

  • Source 用于接收外部源发送过来的数据,并产生事件。不同的数据源,数据格式可能不同。Flume可以支持Avro、Thift、log4jsyslog、Http POST等方式从外部数据源来传输数据。
  • Channel 用于临时存储Source发送的Event数据,它可以存放在本地文件系统中、内存、JDBC等,直到成功发送到目的地或下一个Agent的Channel中,才能被删除。
  • Sink 用于消费Channel中的Event,并将数据发送到目的地或下一个Source。目的地包括HDFS、Hbase、file等。

事务和可靠性

Flume使用独立的事务来保证每个Event从Source到Channel,再到Sink的可靠传递。如果由于某种原因,Event不能被记录(log),那么事务将发生回滚,Event将会保留在Channel中,直到再次传递。

Channel可以有两种的形式来存储Event:一种为File Channel,另一种为Memory Channel。两者的区别是,File Channel具有持久性,而Memory Chanel没有。在Event成功写入到Channel后,File Channel中的Event不会丢失,即使Agent重启,而Memory Channel中的Event将会丢失。选择哪一种,应根据应用场景来选择,使用Memory Channel较File Channel有较高的吞吐量。

复杂的数据流模型

多Agent模型

Two agents communicating over Avro RPC

流合并

A fan-in flow using Avro RPC to consolidate events in one place

对于上图,如果第二层的Agent4不可用,那么整个传输将会中断。对于这种情况,Flume中还可以为每个Agent配置多个Sink,来提高Agent的容错性和负载均衡:






流复用

Flume支持复用事件,可以将事件流到一个或多个目的地。它通过定义一个流复用器,可以复制或选择事件路由到一个或多个Channel,如下图。

A fan-out flow using a (multiplexing) channel selector


0 0
原创粉丝点击