美文网首页大数据flume玩转大数据
Flume学习系列(一)----总体介绍

Flume学习系列(一)----总体介绍

作者: 小北觅 | 来源:发表于2018-08-20 16:33 被阅读263次

    前言:  本文是flume学习系列的开篇,主要介绍了flume的各种组件及相关配置。但是本篇文章并不打算从环境搭建开始,因为比较简单而且网上资料也很详尽:

    001.jpg

        So,研读了一下官方文档,特此把Flume的一些重要知识点总结一下。能力有限,如有错误,提前感谢各位大佬提出。

    我还是前言:我不是人造革,是真皮。开车之前我们起码要知道Flume是个什么鬼吧?Flume是一个高可用的,高可靠的,分布式的海量日志采集、聚合和传输的系统,Flume支持在日志系统中定制各类数据发送方,用于收集数据;同时,Flume提供对数据进行简单处理,并写到各种数据接受方(可定制)的能力。好,开始飙车。

    一、Architecture

        首先,介绍一下。。。wait,wait,


    002.jpg     蛤蛤蛤,这是flume的结构图: 003.png

        分析一下这个图,箭头的指向代表数据的流向。数据从Web 服务器 --> Source --> Channel-->Sink-->HDFS。我们需要关注的是中间被矩形框起来的部分(Agent),它就是Flume的核心。从名字上我们就能直观的想到,Source(源)是用来收集数据的,Channel(管道)是用来传输数据的,Sink(沉槽)是用来存储数据的。
        很简单,Flume以Agent为最小的独立运行单位。一个Agent就是一个JVM进程。单Agent由Source、Sink和Channel三大组件构成。上面这种单Agent结构已经可以完成很多任务了,但是,实际中有各种花式需求。


    004.jpg

        比如:一个电商公司,每天产生很多的交易记录,这些记录需要被存储,同时公司也可能会对这些记录进行分析,给用户实时推荐,那就需要把这些产生的数据流向不同的目的地。这要怎么办呢?


    005.jpg

        不慌,大牛早就想到这些情况了,Flume中有multi-hop(多跳)、Consolidation(合并)、Multiplexing the flow(多路数据流)来解决各种花式问题。
        我认为,multi-hop(多跳)一般用来做缓冲,防止源产生数据太快处理不过来,


    006.png

        Consolidation(合并)用来把多个源合并到一个目的地。


    007.png

        Multiplexing the flow(多路数据流)用来把单个源分发给多个目的地。


    008.png

    二、Configuration

    这部分就是如何去使用flume了,flume的配置文件在安装目录下的conf/flume.conf。注意:安装完flume后,这个文件是.template后缀的。我们需要把它拷贝一份。下面我们通过一个小案例简单介绍一下flume的配置。netcat通过localhost的44444端口给source发消息,最终以日志的形式打印出来。

    # Name the components on this agent
    # a1是agent名,r1,k1,c1是a1的三个组件
    a1.sources = r1
    a1.sinks = k1
    a1.channels = c1
    
    # Describe/configure the source
    #设置source的一些属性,这些属性的key可以从User Guide中查到,value是flume已经为我们写好的一些常用source。
    #后面我们可以自定义source
    a1.sources.r1.type = netcat
    a1.sources.r1.bind = localhost
    a1.sources.r1.port = 44444
    
    # Describe the sink
    #设置sink的一些属性
    a1.sinks.k1.type = logger
    
    # Use a channel which buffers events in memory
    #设置channel的一些属性
    a1.channels.c1.type = memory
    a1.channels.c1.capacity = 1000
    a1.channels.c1.transactionCapacity = 100
    
    # Bind the source and sink to the channel
    #把source和sink通过channel链接起来
    a1.sources.r1.channels = c1
    a1.sinks.k1.channel = c1 
    

        这就完成了一个最基本的flume配置。然后就是启动flume。
    $ bin/flume-ng agent --conf ../conf --conf-file ../conf/flume.conf --name a1 -Dflume.root.logger=DEBUG,console
        这里有几个参数,--conf后面跟配置文件目录,--conf-file后面跟配置文件, --name后面跟要启动的Agent。 -D后面跟一些其他的启动参数,比如日志相关的。

    三、Source,Channel,Sink

    下面这个表格是Flume为我们提供的现成的Source,Channel,Sink。已经可以满足很多需求了,如果我们想根据自己的业务需求去定制,可以模仿这些现成的类去写,准备后面的文章去动手实现一下。


    table1.png

    More important,官方文档十分详细:准备好起飞了么?

    009.jpg

    官网中的User Guide对这些组件的各种配置描述的十分详细,炒鸡友好。举个栗子:比较常用的HTTP Source,(通过HTTP get或post请求接收事件)文档中是这样的:


    010.png 011.gif

    相应的 Channel、Sink也都一样。如果需要查询如何配置,直接去官网看。

    四、总结

        我觉得理解和使用flume并不难,但是要实现一些自定义的功能,就需要研读一下flume的源码,然后进行模仿。还有就是没有一整套的处理流程去学习(从收集数据到传递到沉槽)。所以后面决定写一些Demo,以便于更好的掌握flume。

    相关文章

      网友评论

        本文标题:Flume学习系列(一)----总体介绍

        本文链接:https://www.haomeiwen.com/subject/vqpkiftx.html