flume学习(一)---flume总览

绪论:

  本文的内容包括flume的背景、数据流模型、常见的数据流操作、flume agent启动和flume agent简单实例。参考文档为flume官网的flume1.8.0 FlumeUserGuide

一、背景

  flume是由cloudera软件公司产出的可分布式日志收集系统,2009年被捐赠给apache软件基金会,目前是apache的一个顶级项目。

  flume是一个高可用的,高可靠的,分布式的海量日志采集、聚合和传输的系统,值得注意的是,由于传输的数据是可定制的,因此flume不仅可以用于日志记录的传输,也可以用于传输网络流量数据、社交媒体数据、邮件信息等数据。
  当前Flume有两个版本,Flume 0.9X版本统称Flume-og,Flume1.X版本统称Flume-ng。由于Flume-ng经过重大重构,与Flume-og有很大不同,使用时请注意区分。
二、数据流模型
  flume中的数据流模型如图2.1,其中flume中定义的术语解释如下:
  1.event:一个数据流单元,存储格式为字节;
  2.agent:一个JVM进程,是flume的最小组成单位,负责flume组件(包括source、channel和sink等)的管理。每个组件可以有多个;
  3.source:数据源,负责接收外部数据源发送的数据;
  4.channel:缓冲区,当source接收数据后,会存储在一个或者多个channel中;
  5.sink:负责消费channel中的数据并将其发送至HDFS等外部存储或者另一个flume agent的source。
  

图2.1 flume数据流模型

  一个flume agent的典型数据流动过程为:

  1.外部数据源(一个或多个)发送指定格式的数据至flume agent,source对数据作反序列化处理并存储在一个或多个channel中;
  2.当sink需要某个数据时,从指定的channel中取出并删除channel中的原始数据。
  3.sink按指定格式对数据做序列化并发送到指定位置。
  要点:
  1.一个source可以对应一个或多个channel,但一个sink只能对应一个channel;
  2.当sink消费了对应channel中的数据之后,channel中的原始数据会被删除;
  3.source和sink都必须指定其type,type不同,序列化机制不同。
三、常见的数据流操作
  flume1.8.0的FlumeUserGuide中提到了以下常见的数据流操作:
  1.多个agent级联(multi-agent flow)
  flume agent可以级联起来,形成agent链。
 

图3.1 multi-agent flow

  2.合并(Consolidation)
  通过Consolidation,flume可以用于收集多个数据源生产的数据。
  

图3.2 Consolidation

  3.Multiplexing the flow

  通过Multiplexing,flume可以将一个event流发送到一个或多个目的地。

图3.3 Multiplexing the flow

四、flume agent启动 

  如上所述,一个flume agent可以包含多个source、channel和sink。根据flume1.8.0的FlumeUserGuide,可以通过以下命令启动一个flume agent:

$FLUME_HOME/bin/flume-ng agent -n $agent_name -c conf -f conf/flume-conf.properties.template

  其中,-n参数用于指定agent名称,-c参数用于指定conf目录,-f参数用于指定配置文件。

  一个flume agent的启动流程如下:

  1.根据需求编写配置文件;

  2.使用上述命令指定配置文件并启动flume agent。

五、flume agent实例

  flume官网提供了一个flume agent的简单实例,其名称是a1,配置文件如下:

# example.conf: A single-node Flume configuration

# Name the components on this agent
a1.sources = r1
a1.sinks = k1
a1.channels = c1

# Describe/configure the source
a1.sources.r1.type = netcat
a1.sources.r1.bind = localhost
a1.sources.r1.port = 44444

# Describe the sink
a1.sinks.k1.type = logger

# Use a channel which buffers events in memory
a1.channels.c1.type = memory
a1.channels.c1.capacity = 1000
a1.channels.c1.transactionCapacity = 100

# Bind the source and sink to the channel
a1.sources.r1.channels = c1
a1.sinks.k1.channel = c1

  上述配置文件配置了一个flume agent,其名称为a1,包含一个名为r1的source、名为c1的channel和名为k1的sink,数据流方向为r1-->c1-->k1。各组件的详细属性如下:

组件/属性 名称 type bind port channel capacity transactionCapacity
source r1 netcat   localhost 44444 c1
channel c1 memory 1000 100
sink k1 logger c1

  在flume的安装目录执行如下命令启动该flume agent:(备注:example.conf位于flume安装目录下)

bin/flume-ng agent --conf conf --conf-file example.conf --name a1 -Dflume.root.logger=INFO,console

  命令参数解释:

  1.--conf conf指定配置文件目录为当前目录下的conf目录;(注意:该目录下必须有flume-enx.sh文件和log4j的配置文件,否则运行失败)

  2.--conf-file example.conf指定配置文件为当前目录的example.conf文件;

  3.--name a1指定agent名称为a1;

  4.-Dflume.root.logger=INFO,console指定日志输出级别为INFO,且输出目的地为控制台。

  启动信息如下:

  当向localhost:44444通过TCP连接发送数据时,该flume agent将会接收到发送的数据并打印在控制台:

  1.通过telnet建立TCP连接并发送数据:

  2.agent接收数据并打印在控制台:

 

 

  
posted @ 2018-02-05 18:12  赵庆-BUPT  阅读(239)  评论(0编辑  收藏  举报