顶做抱枕网站,免费搭建,网易企业邮箱手机端,门户网登录入口一、概述
Apache Flume是一个分布式#xff0c;可靠且可用的系统#xff0c;用于有效地收集#xff0c;聚合大量日志数据并将其从许多不同的源移动到集中式数据存储中。
Apache Flume的使用不仅限于日志数据聚合。由于数据源是可定制的#xff0c;因此Flume可用于传输大量…一、概述
Apache Flume是一个分布式可靠且可用的系统用于有效地收集聚合大量日志数据并将其从许多不同的源移动到集中式数据存储中。
Apache Flume的使用不仅限于日志数据聚合。由于数据源是可定制的因此Flume可用于传输大量事件数据包括但不限于网络流量数据社交媒体生成的数据电子邮件消息以及几乎所有可能的数据源。
Apache Flume是Apache Software Foundation的顶级项目。
1起源
Flume是Cloudera提供的一个高可用的、高可靠的、分布式的海量日志收集、聚合和传输的系统Flume支持在日志系统中定制各类数据发送方用于收集数据同时Flume提供对数据进行简单处理并写道各种数据接收方(可定制)的能力。
Flume初始的发行版本目前被统称为“Flume OGoriginal generation”属于 Cloudera。但随着FLume功能的扩展“Flume OG”代码工程臃肿、核心组件设计不合理、核心配置不标准等缺点暴露出来尤其是在“Flume OG”的最后一个发行版本0.94.0中日志传输不稳定的现象尤为严重为了解决这些问题2011年10月22号Cloudera完成了“Flume-728”对Flume进行了里程碑式的改动重构核心组件、核心配置以及代码架构重构后的版本统称为“Flume NGnext generation”改动的另一原因是将 Flume 纳入Apache旗下“Cloudera Flume”改名为“Apache Flume”。2重要版本 Flume 0.9X版本的统称Flume-og Flume 1.X版本的统称Flume-ng。 由于Flume-ng经过重大重构与Flume-og有很大不同。 二、架构
Flume事件定义为具有字节有效负载和可选字符串属性集的数据流单位。Flume代理是一个JVM进程承载了组件事件通过这些组件从外部源流到下一个目标hop。
Flume源使用由外部源如Web服务器传递给它的事件。外部源以目标Flume源可以识别的格式将事件发送到Flume。例如Avro Flume源可用于从流中从Avro接收器发送事件的流中的Avro客户端或其他Flume代理接收Avro事件。可以使用Thrift Flume源定义类似的流程以接收来自Thrift Sink或Flume Thrift Rpc客户端或以Flume Thrift协议生成的任何语言编写的Thrift客户端的事件.Flume源接收到事件后会将其存储到一个或多个渠道。该通道是一个被动存储用于保留事件直到被Flume接收器消耗为止。文件通道就是一个示例–由本地文件系统支持。接收器从通道中删除事件并将其放入HDFS之类的外部存储库通过Flume HDFS接收器或将其转发到流中下一个Flume代理下一跳的Flume源。给定代理中的源和接收器与通道中上演的事件异步运行。
1数据流模型 2复合流模型
Flume允许用户建立多跳流程其中事件在到达最终目的地之前会通过多个代理传播。它还允许扇入和扇出流上下文路由和备份路由故障转移。 事件在每个代理上的一个通道中上演。然后将事件传递到流中的下一个代理或终端存储库如HDFS。仅将事件存储在下一个代理程序的通道或终端存储库中之后才将其从通道中删除。这就是Flume中的单跳消息传递语义如何提供流的端到端可靠性的方式。
Flume使用事务性方法来确保事件的可靠传递。源和接收器分别在事务中封装在通道提供的事务中放置或提供的事件的存储/检索。这确保了事件集在流中从点到点可靠地传递。在多跳流的情况下来自上一跳的接收器和来自下一跳的源都运行其事务以确保将数据安全地存储在下一跳的通道中。
事件在通道中上演该通道管理从故障中恢复。Flume支持持久的文件通道该通道由本地文件系统支持。还有一个内存通道可以将事件简单地存储在内存队列中这样速度更快但是当代理进程死亡时仍保留在内存通道中的任何事件都无法恢复。 三、核心组件
Flume Agent配置存储在本地配置文件中。这是遵循Java属性文件格式的文本文件。可以在同一配置文件中指定一个或多个Agent的配置。配置文件包括代理中每个SourceSink和Channel的属性以及它们如何连接在一起以形成数据流。
流中的每个组件SourceSink或Channel都有一个名称类型和特定于该类型和实例化的属性集。例如一个Avro源需要一个主机名或IP地址和一个端口号来接收数据。内存Channel可以具有最大队列大小“容量”并且HDFS接收器需要知道文件系统URI创建文件的路径文件旋转的频率“ hdfs.rollInterval”等。组件的所有此类属性需要在托管Flume Agent的属性文件中进行设置。
Agent需要知道要加载哪些单个组件以及如何连接它们才能构成流程。通过列出代理中每个SourceSink和Channel的名称然后为每个Sink和Source指定连接Channel来完成此操作。例如Agent通过称为FileChannel的文件通道将事件从名为avroWeb的Avro Source流到HDFS Sink hdfs-cluster1。配置文件将包含这些组件的名称和文件通道作为avroWeb源和hdfs-cluster1 Sink的共享通道。
Agent:使用JVM 运行Flume。每台机器运行一个agent但是可以在一个agent中包含多个sources和sinks。 Client:生产数据运行在一个独立的线程。Source:从Client专门用来收集数据传递给Channel可以处理各种类型、各种格式的日志数据,包括avro、thrift、exec、jms、spooling directory、netcat、sequence generator、syslog、http、legacy、自定义。Sink:从Channel收集数据运行在一个独立线程,sink组件是用于把数据发送到目的地的组件目的地包括hdfs、logger、avro、thrift、ipc、file、null、Hbase、solr、自定义。Channel:连接 sources 和 sinks 这个有点像一个队列,source组件把数据收集来以后临时存放在channel中即channel组件在agent中是专门用来存放临时数据的——对采集到的数据进行简单的缓存可以存放在memory、jdbc、file等等。Events:可以是日志记录、 avro 对象等。