继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

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

慕哥9229398
关注TA
已关注
手记 1099
粉丝 198
获赞 911

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

webp

001.jpg


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

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

一、Architecture

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


webp

002.jpg



    蛤蛤蛤,这是flume的结构图:

webp

003.png


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


webp

004.jpg

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


webp

005.jpg

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


webp

006.png

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


webp

007.png

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


webp

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 = 1000a1.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。已经可以满足很多需求了,如果我们想根据自己的业务需求去定制,可以模仿这些现成的类去写,准备后面的文章去动手实现一下。


webp

table1.png

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

webp

009.jpg


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


webp

010.png

webp

011.gif


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

四、总结

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



作者:小北觅
链接:https://www.jianshu.com/p/bce1088eb8a6


打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP