flume学习一:flume基础知识

Posted 健康平安的活着

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了flume学习一:flume基础知识相关的知识,希望对你有一定的参考价值。

一.Flume使用的前提:

 Flume使用 java编写,其需要运行在 Java1.6或更高版本之上

二.Flume的定义:

 Flume是一个分布式、可靠、高效可用的海量日志采集、聚合和传输系统,支持在系统中定制各类数据发送方,用于搜集数据;同时,flume提供对数据进行加单处理,并写到各种数据接受方(可定制)的能力。

核心一句话:将数据从数据源收集过来,再送到目的地。为了保证输送一定成功,在送到目的地之前,会先缓冲数据,待数据真正到的目的地后,删除自己缓冲的数据。

三.组件及作用:

1.source:从client端收集数据,传递个channel。直接读取:文件source的有两种方式:

   ExecuteSource:以运行linux命令的方式,持续的输出最新的数据,如tail –f 文件名指令,在这种方式下取的文件名必须是指定的。

   SpoolSource:检测配置的目录下新增的文件并将文件中的数据读取出来。

2.channel:缓冲数据,连接sources和sinks,有点像队列。类型有MemoryChannel,JDBC Channel,FileChannel等。

3. sink:从channel收集数据,运行一个独立线程。可以向文件系统、数据库、hadoop存储数据。

   在日志数据较少时,可以将数据存储在文件系统中,并且设定一定的时间间隔保存数据。

  在日志数据较多时,可以将相应的日志存储到hadoop中,便于日后进行相应的数据分析。

组件名称功能介绍

 

 

Agent代理

使用JVM运行Flume。每台机器运行一个agent,但是可以在一个agent中包含多个sourcessinks

Client客户端

生产数据,运行在一个独立的线程。

Source

Client收集数据,传递给Channel

Sink接收器

Channel收集数据,进行相关操作,运行在一个独立线程。

Channel通道

连接 sources sinks,这个有点像一个队列。

Events事件

传输的基本数据负载。

 

四.Flume的整体构成图

    

源将事件写到一个多或者多个通道中

接收器只从一个通道接收事件

代理可能会有多个源、通道与接收器

Eventflume数据传输的基本单元flume事件的形式将数据从源头传送到目的地。

一个 Event  Map<String,String>Headers  byte[] body 组成,其中 Headers 保存了 Event 的属性,body 保存了 Event 的内容。

Source:负责接收events或通过特殊机制产生events,并将events批量的放到一个或多个channels

Channel位于sourcessinks之间,用于缓存进来的events,当sink成功的将events发送到下一跳的channel或最终目的,eventschannel移除。

Sink:负责将events传输到吓一跳或最终目的,成功完成后将eventschannel移除。

五.常见错误:

   Could not configure sink  sink1 due to:No channel configured for sink: sink1
org.apache.flume.conf.ConfigurationException: No channel configured for sink:sink1

则仔细查看配置文件,一个source可以对应多个channel,所以是channelsagent.sources.source1.channels = channel1

但是一个sink对应一个channel,所以是channelagent.sinks.sink1.channel =channel1,请注意。

六.常见各组件支持的类型:

  Flume Source支持的类型:

 

Source类型

说明

Avro  Source

支持Avro协议(实际上是Avro RPC),内置支持

Thrift  Source

支持Thrift协议,内置支持

 

Exec  Source

JMS  Source

从JMS系统(消息、主题)中读取数据,ActiveMQ已经测试过

Spooling  Directory Source

监控指定目录内数据变更

Twitter  1% firehose Source

通过API持续下载Twitter数据,试验性质

Netcat  Source

监控某个端口,将流经端口的每一个文本行数据作为Event输入

Sequence  Generator Source

序列生成器数据源,生产序列数据

Syslog  Sources

读取syslog数据,产生Event,支持UDP和TCP两种协议

HTTP  Source

基于HTTP POST或GET方式的数据源,支持JSON、BLOB表示形式

Legacy  Sources

兼容老的Flume OG中Source(0.9.x版本)

 

Flume Channel支持的类型:

 

Channel类型

说明

Memory  Channel

Event数据存储在内存中

JDBC  Channel

Event数据存储在持久化存储中,当前Flume Channel内置支持Derby

File  Channel

Event数据存储在磁盘文件中

Spillable  Memory Channel

Event数据存储在内存中和磁盘上,当内存队列满了,会持久化到磁盘文件(当前试验性的,不建议生产环境使用)

Pseudo  Transaction Channel

测试用途

Custom  Channel

自定义Channel实现

 

Flume Sink支持的类型

 

Sink类型

说明

HDFS  Sink

数据写入HDFS

Logger  Sink

数据写入日志文件

Avro  Sink

数据被转换成Avro Event,然后发送到配置的RPC端口上

Thrift  Sink

数据被转换成Thrift Event,然后发送到配置的RPC端口上

IRC  Sink

数据在IRC上进行回放

File  Roll Sink

存储数据到本地文件系统

Null  Sink

丢弃到所有数据

HBase  Sink

数据写入HBase数据库

Morphline  Solr Sink

数据发送到Solr搜索服务器(集群)

ElasticSearch  Sink

数据发送到Elastic Search搜索服务器(集群)

Kite  Dataset Sink

写数据到Kite Dataset,试验性质的

Custom  Sink

自定义Sink实现

 

各种组件的特性:

(1)可靠性

当节点出现故障时,日志能够被传送到其他节点上而不会丢失。Flume提供了三种级别的可靠性保障,从强到弱依次分别为:end-to-end(收到数据agent首先将event写到磁盘上,当数据传送成功后,再删除;如果数据发送失败,可以重新发送。),Store on failure(这也是scribe采用的策略,当数据接收方crash时,将数据写到本地,待恢复后,继续发送),Best effort(数据发送到接收方后,不会进行确认)。

(2)可扩展性

Flume采用了三层架构,分别为agentcollectorstorage,每一层均可以水平扩展。其中,所有agentcollectormaster统一管理,这使得系统容易监控和维护,且master允许有多个(使用ZooKeeper进行管理和负载均衡),这就避免了单点故障问题。

(3)可管理性

所有agentcolletormaster统一管理,这使得系统便于维护。多master情况,Flume利用ZooKeepergossip,保证动态配置数据的一致性。用户可以在master上查看各个数据源或者数据流执行情况,且可以对各个数据源配置和动态加载。Flume提供了webshell scriptcommand两种形式对数据流进行管理。

(4)功能可扩展性

用户可以根据需要添加自己的agentcollector或者storage。此外,Flume自带了很多组件,包括各种agentfile syslog等),collectorstoragefileHDFS等)。

 

 

 

 

 

 

 

以上是关于flume学习一:flume基础知识的主要内容,如果未能解决你的问题,请参考以下文章

Flume学习之路 Flume的基础介绍

Flume搭建及学习(基础篇)

Flume初步学习

flume 基本知识

Hadoop学习笔记—19.Flume框架学习

Flueme学习之路Flume的基础介绍