flume基础

一、FLUME介绍

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

设计目标:

(1) 可靠性

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

flume基础

(2) 可扩展性

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

(3) 可管理性

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

(4) 功能可扩展性

用户可以根据需要添加自己的agent,collector或者storage。此外,Flume自带了很多组件,包括各种agent(file, syslog等),collector和storage(file,HDFS等)。

二、FLUME架构

flume的逻辑架构:

flume基础

正如前面提到的,Flume采用了分层架构:分别为agent,collector和storage。其中,agent和collector均由两部分组成:source和sink,source是数据来源,sink是数据去向

Flume使用两个组件:Master和Node,Node根据在Master shell或web中动态配置,决定其是作为Agent还是Collector。

数据流简单示例

Step 1: 外部数据源(web server)将Flume可识别的Event发送到Source;

Step 2: Source收到Event后存储到一个或多个Channel中;

Step 3: Channel保留Event直到Sink将其处理完毕;

Step 4: Sink从Channel中取出数据,并将其传输至外部存储(HDFS)


flume基础

组件  功能介绍

Event       Flume处理数据元,可能是一条日志、一个Avro对象等,通常约4KB大小

Agent      Flume运行实体,每台机器一份,可能包括多个Source或者Sink

Client      产生Event,在单独线程中运行

Source    接收Event,并送入Channel,在单独线程中运行并监控

Channel  连接Source与Sink,功能类似队列,有可靠性实现

Sink        从Channel接收Event,可能进行下一步转发(如连与另外某Source通讯),在单独线程中运行并监控

配置文件示例

• # example.conf: A single-node Flume configuration

• # 组件该代理的名字

• agent1.sources = source1

• agent1.sinks = sink1

• agent1.channels = channel1

• # 采集类型,IP,端口

• agent1.sources.source1.type = netcat

• agent1.sources.source1.bind = localhost

• agent1.sources.source1.port = 44444

• # 输出类型

• agent1.sinks.sink1.type = logger

• # channel中的存储方式

• agent1.channels.channel1.type = memory

• # 将source和channel绑定;sink和channel绑定,source可以绑定多个channel以空格隔开,shink只能绑定一个channel

• agent1.sources.source1.channels = channel1

• agent1.sinks.sink1.channel = channel1


基本功能


我们看一下,Flume NG都支持哪些功能(目前最新版本是1.5.0.1),了解它的功能集合,能够让我们在应用中更好地选择使用哪一种方案。说明Flume NG的功能,实际还是围绕着Agent的三个组件Source、Channel、Sink来看它能够支持哪些技术或协议。我们不再对各个组件支持的协议详细配置进行说明,通过列表的方式分别对三个组件进行概要说明:


Flume Source

Source类型       说明

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

Thrift Source                         支持Thrift协议,内置支持

Exec Source                         基于Unix的command在标准输出上生产数据

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实现

另外还有Channel Selector、Sink Processor、Event Serializer、Interceptor等组件,可以参考官网提供的用户手册。


你可能感兴趣的:(flume基础)