设为首页 加入收藏

TOP

Hello~Flume!关于Flume的小分享
2018-11-13 16:14:31 】 浏览:89
Tags:Hello Flume 关于 分享

Apache官网对Flume的描述是这样子的:

Flume is a distributed, reliable, and available service for efficiently collecting, aggregating, and moving large amounts of log data. It has a simple and flexible architecture based on streaming data flows. It is robust and fault tolerant with tunable reliability mechanisms and many failover and recovery mechanisms. It uses a simple extensible data model that allows for online analytic application.

简单来说,Apache旗下的Flume,是一个分布式日志收集系统,支持多种数据来源,可以对日志信息进行简单处理,然后写出到数据存储系统中,也就是HDFS之类的了。

关于flume的几个概念

来自官网的flume介绍

  1. Event: 事件,数据的载体。Flume将一批日志信息包装成一个event进行传输处理,结构非常简单,就是json串。由一个headers和一个body组成,header里面是自定义内容或默认内容,body里面就是日志的本身。

{“headers”:infomation,”body”:infomation}

  1. Agent: 代理,就是Flume里面包装、装载、运输event到目的地的过程。这个过程,包含了三个组件,分别是下面的source、channel、sink(敲黑板啦!):

  2. Source: 数据源,接受日志并封装成Event,传输到Channel

  3. Channel: 传输通道,被动接受Source传来的数据,暂时存储,等待 Sink消费

  4. Sink: 目的地传送槽,获取Agent里面的数据,即消费Channel中的数据,并传送到目的地。


懂得72变的Flume

Flume的厉害之处在于它可以千变万化的结构,几乎适应任何的数据处理场景。

  1. 扇入扇出 Consolidation

扇入:多个Event进入同一个Destination
扇出:一个Event传送到多个Destination

在这里插入图片描述

  1. 多级流动 Setting multi-agent flow

同一个Event要经过多个Agent才到达特定的Destination

在这里插入图片描述

所以说,扇入扇出组合多级流动,别说是蜘蛛网,再复杂的网络Flume也能织出来。
在这里插入图片描述


到底Flume能搞什么鬼

搞什么鬼?就是Flume能传递什么呢?我们从Flume的Agent组件传输/存储类型里切入窥探下吧~

Source Sink Channel
Avro Source HDFS Sink Memory Channel
Thrift Source Hive Sink JDBC Channel
Exec Source Logger Sink Kafka Channel
JMS Source Avro Sink File Channel
Spooling Directory Source Thrift Sink Spillable Memory Channel
Twitter 1% firehose Source (experimental) IRC Sink Pseudo Transaction Channel
Kafka Source File Roll Sink Custom Channel
NetCat TCP Source Null Sink
NetCat UDP Source HBaseSinks
Sequence Generator Source MorphlineSolrSink
Syslog Sources ElasticSearchSink
HTTP Source Kite Dataset Sink
Stress Source Kafka Sink
Legacy Sources HTTP Sink
Avro Legacy Source Custom Sink
Thrift Legacy Source
Custom Source
Scribe Source

一大堆的英文,有木有引起你的密集恐惧症?
划重点,以上标黄项为常用类型!

1.Source: Avro(序列化信息)、SpoolingDirectory(文件监听)、Http
2.Channel: Memory(内存)
3.Sink:HDFS(Hadoop的数据的存储技术)、Logger(日志)、Avro(序列化信息)

问题来了

这些什么类型的,怎么玩?
首先,你要启动Hadoop
最后,你要启动Flume
中间呢?当然是修改配置文件玩~
打开Flume目录下的conf文件夹,找到flume.properties,配置!

如果需要绑定多个组件,空格分开就好,例如a1.sources = r1 r2 r3

a1.sources  =  r1		#定义agent的数据源source,可以有多个。
a1.sinks  =  k1			#定义agent的数据出处,可以有多个。
a1.channels  =  c1		#定义agent的通道,一般有多少个sink就有多少个channel

a1.sources.r1.type  =  http			#【!】指定source的类型为http
a1.sources.r1.bind  =  0.0.0.0		#指定source的来源。一般为本机,被动接收。
a1.sources.r1.port  =  22222		#指定端口

a1.sinks.k1.type  =  avro						#【!】指定sink的类型为avro
a1.sinks.k1.hostname  =  111.111.111.111		#指定sink的目标节点IP
a1.sinks.k1.port  =  22222						#指定目标端口

a1.channels.c1.type  =  memory						#指定channel的类型为 内存
a1.channels.c1.capacity  =  1000					#指定存储容量,避免强制抢占内存影响其他进程的正常运行
a1.channels.c1.transactionCapacity  =  100			#指定事物容量

a1.sources.r1.channels  =  c1		#绑定source
a1.sinks.k1.channel  =  c1		#绑定sink

如果Sink为logger的时候,要进行如下修改:

a1.sinks.k1.type  =  logger

如果Source是要做文件监听SpoolingDirectory,要这样(自定义的文件夹要存在哦):

a1.sources.r1.type  =  spooldir
a1.sources.r1.spoolDir = /usr/local/src/flume/bin/temp

什么!?你不会启动?玩我吗?

谁叫我人这么好?好吧,大发慈悲告诉你!下次自己看官网啦~
划重点!Agent的启动要在bin目录底下进行(或者指令指向bin)~

./flume-ng agent -c ./ -f ./flume.properties -n a1 -Dflume.root.logger=INFO,console
  1. Source = Avro
    划重点!启动Agent后,要在bin目录底下执行以下代码~
    然后建个测试用的文件,conf/temp.txt
./flume-ng avro-client -c ../conf -H 0.0.0.0 -p 22222 -F temp.txt
  1. Source = Http
    任意目录执行都行
curl -X POST -d '[{"headers":{"tester":"i am superman"},"body":"flume flume"}]' http://0.0.0.0:22222
  1. Source = SpoolingDirectory
    启动好Flume就好了,然后往指定自定义文件夹内添加东西。

划重点
只能监听到一级目录已下的文件变化,例如监听 temp文件夹,但是temp/aa/1.txt是监听不到的。为什么?因为监听到的文件会被改名字,加了个后缀识别监听状态,至于是什么字段,自己尝试下吧~


【超级干货】那些关于Flume的那些面试题

面试题?说是面试题,不如说是测测大家对Flume理解层度的题目
反正做一做,肯定有益处~

1 flume管道内存,flume宕机了数据丢失怎么解决

解答:

1、Flume的channel分为很多种,可以将数据写入到文件

2、防止非首个agent宕机的方法数可以做集群或者主备

2 flume配置方式,flume集群(问的很详细)

解答:

Flume的配置围绕着source、channel、sink叙述,flume的集群是做在agent上的,而非机器上。

3 flume不采集Nginx日志,通过Logger4j采集日志,优缺点是什么?

解答:

优点:Nginx的日志格式是固定的,但是缺少sessionid,通过logger4j采集的日志是带有sessionid的,而session可以通过redis共享,保证了集群日志中的同一session落到不同的tomcat时,sessionId还是一样的,而且logger4j的方式比较稳定,不会宕机。

缺点:不够灵活,logger4j的方式和项目结合过于紧密,而flume的方式比较灵活,拔插式比较好,不会影响项目性能。

4 flume和kafka采集日志区别,采集日志时中间停了,怎么记录之前的日志。

解答:

Flume采集日志是通过流的方式直接将日志收集到存储层,而kafka试讲日志缓存在kafka集群,待后期可以采集到存储层。

Flume采集中间停了,可以采用文件的方式记录之前的日志,而kafka是采用offset的方式记录之前的日志。

以上四题转载自风远陌小哥哥的博文:https://blog.csdn.net/albg_boy/article/details/78424509

5 Flume事务的处理
小编年纪尚轻,这个还不会回答,但估计是跟Channel有关,但是身边有小伙伴去面试被问到了。
勉为其难翻了一下伟大的CSDN,找到了个比较好的博文,大家参考下。
等小编发奋图强,一定把这东西嚼碎吐出来分享给大家…

flume的事务实现
作者:lilyjoke (估计也是个好看的小哥哥)
原文:https://blog.csdn.net/lilyjoke/article/details/81363906


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇【十八掌●武功篇】第十二掌:Flu.. 下一篇Spark Streaming + Flume Integra..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目