Flume (一) Introduction

Overview

Apache Flume是一个分布式、高可靠和高可用的, 用于收集、聚集和将来自不同来源的大量日志数据移动到一个中央数据仓库。

Apache Flume不仅仅局限于数据的聚集。由于数据是可定制的,Flume可用于传输大量事件数据,包括但不限于网络流量数据,社交媒体生成的数据,电子邮件消息以及几乎任何可能的数据源。

Apache Flume是Apache软件基金会的顶级项目。

目前有两个可用的发布版本,0.9.x和1.x。

有关0.9.x轨道的文档,请参阅Flume 0.9.x用户指南。

本文档适用于1.4.x轨道。

鼓励新用户和现有用户使用1.x版本,以便利用最新架构中提供的性能改进和配置灵活性。

System Requirements

  • Java运行时环境 - Java 1.8或更高版本
  • 内存 - 足够的内存用于配置 sources, channels or sinks
  • 磁盘空间 - 足够的磁盘空间用于配置 channels or sinks
  • 目录权限 - agent Read/Write目录权限

Architecture

Data flow model

Flume代理是一个(JVM)进程,它承载事件从外部源流向下一个目标(hop)的组件。

这里写图片描述

Flume源消耗由外部源(如Web服务器)传递给它的事件。外部源以目标Flume源识别的格式向Flume发送事件。例如,Avro Flume源可用于从Avro客户端或从Avro接收器发送事件的流中的其他Flume代理接收Avro事件。可以使用Thrift Flume Source定义类似的流程,以接收来自Thrift Sink或Flume Thrift Rpc客户端或Thrift客户端的事件,这些客户端使用Flume thrift协议生成的任何语言编写。当Flume源接收事件时,它将其存储到一个或多个频道。该通道是一个被动存储器,可以保持事件直到它被Flume接收器消耗。文件通道就是一个例子 - 它由本地文件系统支持。接收器从通道中移除事件并将其放入外部存储库(如HDFS(通过Flume HDFS接收器))或将其转发到流中下一个Flume代理(下一跳)的Flume源。给定代理程序中的源和接收器与通道中暂存的事件异步运行。

Complex flows

Flume允许用户建立multi-hop流,当事件在到达最终目的前要经过多个Agent。它也支持扇入流和扇出流,上下文路由(contextual routing )和失败hops的备份路由(故障转移)。

Reliability 可靠性

Event在每个Agent的Channel上进行缓存,随后Event将会传递到流中的下一个Agent或终端存储库(如HDFS)。只有在存储在下一个代理的通道或终端存储库中后Event才会从Channel中删除。这一步骤实现了单节点架构的可靠性。

Flume使用事务性的操作来保证Event的可靠传送。Source和Sink分别在交易中封装由Channel提供的交易中放置或提供的事件的存储/检索。这确保了该组Event在传输流程中可靠地传递。
在多层架构的情况下,来自前一层的sink和来自下一层的Source都处于运行状态,以确保数据安全地存储在下一层的Channel中。

Recoverability 可恢复性

The events are staged in the channel, which manages recovery from failure. Flume supports a durable file channel which is backed by the local file system. There’s also a memory channel which simply stores the events in an in-memory queue, which is faster but any events still left in the memory channel when an agent process dies can’t be recovered.

事件在通道中进行,该通道管理从故障中恢复。Flume支持持久的文件通道,由本地文件系统支持。还有一个内存通道,它只是将事件存储在内存中的队列中,内存通道非常快,但是当代理进程死亡时仍然留在内存通道中的事件都无法恢复。

猜你喜欢

转载自blog.csdn.net/u013725455/article/details/81219250
今日推荐