Flume分布式收集框架

(一)Flume概述

Flume是由Cloudera提供的一个分布式、高可靠、高可用的服务,用于分布式的海量日志的高效收集、聚合、移动系统

官网定义:(官网:http://flume.apache.org/

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.

关键词:
分布式、可靠、可用的服务。
收集、聚合和移动大量日志数据。
它具有健壮性和容错性。
它使用一个简单的可扩展数据模型,支持在线分析应用程序。

(二)Flume发展史:

Cloudera 开发的分布式日志收集系统 Flume,
Flume 初始的发行版本目前被统称为 Flume OG
og是单线程 主从结构,原本由zookeeper管理

2011 年 10 月 22 号,cloudera 完成了 Flume-728,对 Flume 进行了里程碑式的改动:重构核心组件、核心配置以及代码架构,重构后的版本统称为 Flume NG(next generation),并纳入 apache 旗下,cloudera Flume 改名为 Apache Flume。
ng是双线程 已经取消master管理机制和zookeeper管理机制,变成了纯粹的传输工具

2012.7 1.0
2015.5 1.6
2019.1 1.9

(三)Flume架构及核心组件
1.png

此图来自官网:
从图里可以看出,这是一个agent的Flume架构的核心组件
1)Source 收集:从什么地方采集数据
Flume常用source有:
Avro Source可以以流的方式传递数据
Exec Source
Kafka Source
Netcat Source

2)Channel 聚集:通道,相当于数据的缓存池,提供数据临时存放的地方
Flume常用channel有:
Memory Channel
JDBC Channel
Kafka Channel
File Channel
3) Sink 输出:把channel里的数据读取出来,通过sink推送到目的地
Flume常用sink有:
HDFS Sink
Avro Sink
Logger Sink

多个agent的Flume架构

2.png

整合多个agent

3.png

Multiplexing the flow

4.png

其实这些从一个agent演变出来的Flume架构,最终都是围绕着三个核心组件进行的
从Source读进来,放在Channel里,然后通过Sink再读出去,读到HDFS或者其他地方,就是把这些东西怎么串起来合适,串联还是并联。

【官网小栗子】
从指定网络端口采集数据输出到控制台
使用Flume关键就是写agent配置文件

步骤:
1、总定义
a1:agent 名称 ,启动的时候用到它
r1:数据源source的名称-----a1指定的数据源就一个r1
k1:sink的名称
c1:channel名称

2、配置Source
source的类型根据自己的需求在官网上查需要的source,配置好。
栗子里,source采用的类型是netcat:监听一个端口,会把里面每一行数据转换成event(flume里面的数据传输的单元)
绑定了你的服务器和端口
需要的属性
3、配置Sink
栗子里选用的是logger。INFO级别输出

4、配置Channel
栗子里选用的是memory,事件存储在内存队列中,具有可配置的最大大小。
5、组装

【注意】channel的单复数
一个source可以输出到多个channels
一个sink可以输出到一个channel

# 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 = hadoop001
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

配置文件写好了,检查之后,我们就把它放在
自己定义的文件里

vi example.conf

【启动agent】

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

服务器上另开一个窗口
【使用telnet进行测试】
telnet hadoop001 4444
输入6个: hello

flume窗口就会显示:


5.png

说明:
发送一条数据就是一个event
Event是flume数据传输的基本单元
一个Event = 可选的header +byte array

根据官网的小栗子,你就可以根据自己需要来监控文件 实时采集新增的数据输出到控制台,你也可以根据上面的架构图,采用多个服务器,将A服务器日志实时收集到B服务器到HDFS中,也可以对接kafka完成实时数据的采集,根据自己的项目需求来吧。

❤(四)面试题
来源: 作者:qq_43193797(https://me.csdn.net/qq_43193797)
https://blog.csdn.net/qq_43193797/article/details/86572149
1、 你是如何实现Flume数据传输的监控的
使用第三方框架Ganglia实时监控Flume。
2 Flume的Source,Sink,Channel的作用?你们Source是什么类型?
1、作用 (1)Source组件是专门用来收集数据的,可以处理各种类型、各种格式的日志数据,包括avro、thrift、exec、jms、spooling directory、netcat、sequence generator、syslog、http、legacy (2)Channel组件对采集到的数据进行缓存,可以存放在Memory或File中。 (3)Sink组件是用于把数据发送到目的地的组件,目的地包括Hdfs、Logger、avro、thrift、ipc、file、Hbase、solr、自定义。

2、我公司采用的Source类型为: (1)监控后台日志:exec (2)监控后台产生日志的端口:netcat
3 、Flume 的 Channel Selectors


6.png

补充:官网还有个类型:Custom Channel Selector定义
4、Flume 参数调优
(1)Source 增加Source个数(使用Tair Dir Source时可增加FileGroups个数)可以增大Source的读取数据的能力。 例如:当某一个目录产生的文件过多时需要将这个文件目录拆分成多个文件目录,同时配置好多个 Source 以保证 Source 有足够的能力获取到新产生的数据。 batchSize 参数决定 Source 一次批量运输到 Channel 的event条数,适当调大这个参数可以提高 Source 搬运 Event 到 Channel 时的性能。

(2)Channel type 选择 memory 时 Channel 的性能最好,但是如果 Flume 进程意外挂掉可能会丢失数据。type 选择 file 时 Channel 的容错性更好,但是性能上会比 memory channel 差。 使用file Channel时 dataDirs 配置多个不同盘下的目录可以提高性能。 Capacity 参数决定 Channel 可容纳最大的 event 条数。transactionCapacity 参数决定每次 Source 往 channel 里面写的最大event 条数和每次 Sink 从channel 里面读的最大 event 条数。transactionCapacity 需要大于 Source 和Sink的batchSize 参数。

(3)Sink 增加 Sink 的个数可以增加 Sink 消费 event 的能力。Sink 也不是越多越好够用就行,过多的 Sink 会占用系统资源,造成系统资源不必要的浪费。 batchSize 参数决定 Sink 一次批量从 Channel 读取的 event 条数,适当调大这个参数可以提高 Sink 从 Channel 搬出 event 的性能。

5 、Flume 的事务机制
Flume的事务机制(类似数据库的事务机制):

Flume 使用两个独立的事务分别负责从 Soucrce 到 Channel(put),以及从 Channel 到Sink 的事件传递(take)。

比如 spooling directory source 为文件的每一行创建一个事件,一旦事务中所有的事件全部传递到 Channel 且提交成功,那么 Soucrce 就将该文件标记为完成。

同理,事务以类似的方式处理从 Channel 到 Sink 的传递过程,如果因为某种原因使得事件无法记录,那么事务将会回滚。且所有的事件都会保持到 Channel 中,等待重新传递。

6 Flume 采集数据会丢失吗?
不会,Channel 存储可以存储在 File 中,数据传输自身有事务。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 218,525评论 6 507
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,203评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,862评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,728评论 1 294
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,743评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,590评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,330评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,244评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,693评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,885评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,001评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,723评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,343评论 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,919评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,042评论 1 270
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,191评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,955评论 2 355

推荐阅读更多精彩内容

  • 面对以上的问题,我们如何将这些日志移动到hdfs集群上尼???? 第一种方案:使用shell脚本cp 文件,然后通...
    机灵鬼鬼阅读 1,386评论 1 1
  • 博客原文 翻译作品,水平有限,如有错误,烦请留言指正。原文请见 官网英文文档 引言 概述 Apache Flume...
    rabbitGYK阅读 11,469评论 13 34
  • 阅读目录(Content) 一、Flume简介 二、Flume特点 三、Flume的一些核心概念 3.1、Agen...
    达微阅读 4,727评论 0 9
  • title: Flume构建日志采集系统date: 2018-02-03 19:45tags: [flume,k...
    溯水心生阅读 16,132评论 3 25
  • 一、Flume简介 flume 作为 cloudera 开发的实时日志收集系统,受到了业界的认可与广泛应用。Flu...
    superxcp阅读 944评论 0 2