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

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

5679451-79430b44f607d87c.jpg
001.jpg

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

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

一、Architecture

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


5679451-8118c4ee62a0ecbc.jpg
002.jpg

    蛤蛤蛤,这是flume的结构图:
5679451-90dc831176cc2aad.png
003.png

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


5679451-d127a766f3ee44f3.jpg
004.jpg

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


5679451-9a35759a452b7148.jpg
005.jpg

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


5679451-3d3d548ab5fd3ba1.png
006.png

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


5679451-6d069b0f1a99b221.png
007.png

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


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


5679451-a0f04808acfab335.png
table1.png

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

5679451-2808c801a42930c6.jpg
009.jpg

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


5679451-e9ec92a9fa64eb96.png
010.png
5679451-51028e12b77b1d21.gif
011.gif

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

四、总结

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

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

叹了口丶气

觉得有收获就支持一下吧~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值