flume复习(二)
一、简介:flume是一种分布式、可靠且可用的系统,能够用于有效的从不同的源收集、聚合和移动大量的日志数据到集中式数据存储。它具有基于流数据的简单灵活的架构,它具有健壮的可靠性机制和许多故障转移和恢复机制,具有强大的容错性,使用简单的可扩展的数据模型,允许在线分析的应用程序。flume不仅能用于日志数据的收集。由于数据源是可以指定的,因此flume可用于传输大量事件数据,包括但是不限于网络流量数据,社交媒体生成的数据,电子邮件消息以及几乎任何可能的数据源
1.flume运行的核心是Agent。是以agent为最小的独立运行的单位,一个agent是一个JVM,是一个完整的数据收集工具,含有三个核心的组件,分别是source、channel、sink,通过这三个组件,Event可以从一个地方流向另外一个地方。架构图如下:
2.flume event:一个flume事件被定义为一个具有字节有效负载和可选字符串属性集的数据流单元。一个Flume agent是一个进程,承载事件从外部源流向下一个目标(跃点)的组件。即一个数据单元【由消息头和消息和消息体组成】
3.Source:是Agent的一个组件, 从数据生成器接收数据,然后将数据以flume事件的形式传递到一个或多个channel中
4.Chennel:是一个临时缓冲区,从source接收flume events(flume事件),并且缓冲它们直到它们被sink消费。在源和sink之间扮演桥梁的角色。这些channel是完全事务性的,可以跟许多source和sink协同。如JDBC通道、文件系统通道、内存通道等等。
5.Sink:存放数据到中央化存储,如HBase或者HDFS,它从channel中消费数据(event)并且将其传递到目的地,sink的目的地可能是另外一个sink或者一个中央化存储。.
6.agent:是一个独立的Flume进程,包含组件Source,Channel,Sink。(Agent使用JVM运行Flume),每台机器上运行一个agent,但是一个agent中包含多个sources和sinks。
7.复杂的流程。flume允许用户构建多跳流,其中事件在达到目的地之前经过多个代理。它还允许扇入和扇出流,上下文路由和故障跳跃备份路由。
8.可靠性。事件在每个代理(agent)的通道中进行,然后数据流中的事件传递到下一个代理(agent)或者终端存储库(如HDFS)。只有将数据存储到下一个代理(agent)的通道或者终端存储库中后,才会从通道中删除这些事件。这就是flume中的单跳消息传递语义如何提供的端到端的可靠性。flume使用事务的方法来保证事件传递的可靠性。source和sink分别在事务中封装由信道提供的事务中防止或提供的时间的存储或者检索。这可以确保事件集在流中一个点到另一个点的可靠的传输。在多跳流的情况下,来自前一跳的接收器(sink)和来自后一跳的源(source)都运行其事务以确保数据安全存储在下一条的channel中。
9.可恢复性。事件在通道中进行,该通道处理故障恢复。Flume支持由本地文件系统支持的持久文件通道。还有一个内存通道(channel),他只是将事件出处在内存的队列中,这很快。但是当进代理程死亡的时候,仍然留在内存通道这种的任何事件都无法恢复。
二、配置。
1.agent配置
flume agent的配置是存储在本地文件找中的。这是一个遵循java属性文件格式的文本文件。对于一个或者多个代理的配置可以在同一个配置文件中指定,配置文件包括在一个agent中的每一个source,sink和channel的属性,以及他们如何连接在一起形成数据流。
2.配置单个的组件。数据流中的每个组件(source,sink或者channel)都有一个特定类型和实例化名称的名字、类型和一系列的属性。比如avro source需要一个主机名(或者ip地址)以及一个端口号来接收数据。一个内存通道可以由最大的队列大小(容量),一个hdfs sink需要知道需要创建的文件系统的uri和路径,文件轮换频率等。组件的所有此类属性需要在托管flume代理的属性文件中设置。
3.将各个部分连接在一起
agent需要知道加载哪些组件以及他们如何构成流程。这是通过列出agent中的每个source,source和channel的名称,然后为每个sink和source来指定channel来完成的。
4.启动代理
使用名为flume-ng的shell脚本启动代理程序,该脚本位于Flume发行版的bin目录中。您需要在命令行上指定代理名称,config目录和配置文件:
使用名为flume-ng的shell脚本启动代理程序,该脚本位于Flume发型版本的bin目录中。需要制定代理的名称、config目录和配置文件。
bin/flume-ng agent -n $ agent_name -c conf -f conf/flume-config.properties.template
5.配置示例
(1)单点Flume部署,允许用户生成时间,然后将其记录到控制台
#命名此代理上的组件
a1.sources = r1
a1.sinks=k1
a1.channels = c1 #描述配置源
a1.sources.r1.type=netcat
a1.sources.r1.bind =localhost
a1.sources.r1.port= #描述接收器sink,将收到的数据存储在日志中
a1.sinks.k1.type=logger #使用缓冲内存中时间的通道,缓存的channel是内存
a1.channels.c1.type=memory
a1.channels.c1.capacity=
a1.channels.c1.transactionCapacity= #将内源和接收容器绑定到通道,将source和channel进行绑定,将sink和channel进行绑定
a1.sources.r1.channels=c1
a1.sinks.k1.channel=c1
上面的配置中定义了一个a1的agent,a1有一个侦听端口44444,侦听这个端口上数据的源,一个缓冲内存中事件数据的channel,以及将事件记录到控制台的sink。配置文件命名各种组件,然后描述他们的类型是配置参数,一个给定的配置文件可能命名多个agent,当一个给定的flume金春哥启动的时候,会传递一个标志,告诉它要现实哪个命名代理。
基于上述的配置文件,我们可以用下面的方式来启动Flume:
$ bin / flume-ng agent --conf conf --conf-file example.conf --name a1 -Dflume.root.logger = INFO,console
三、flume source:数据的收集端,复制将数据捕获后进行特殊的格式化,将数据封装到事件中,然后将事件推入Channel中。Flume提供了很多内置的source,支持Avro,log4j,syslog和http post(body为json格式)。可以让应用程序同已有的Source直接打交道,如AvroSource,SyslogTcpSource。 如果内置的Source无法满足需要, Flume还支持自定义Source。
四、Chinanel
1.Channel是连接Source和Sink的组件,可以将它看做一个缓冲区(数据队列),可以将事件暂时存放到内存中,也可以持久化到本地磁盘上,直到sink处理完该事件。常用的两个Chnnel有MemoryChannel和FileChannel
2.Channel的类型
五、Sink
1.Sink从Channel中取出事件,然后将数据发到别处,可以将数据发到文件系统、数据库、HDFS,也可以发到其他agent的source中。在日志数量比较少的时候,可以将数据存储在文件系统中,并且设定一定时间间隔保存数据。
2.数据的类型
六、flume拦截器、数据流以及可靠性
1.flume拦截器:当我们对数据进行过滤的时候,除了在source、Channel和sink进行代码的修改之外,Flume为我们提供了拦截器,拦截器也是chain的形式。拦截器位于source和channel之间,当我们为souce指定拦截器之后,我们在拦截器中会得到event,根据需要我们对evnet进行保留还是抛弃,抛弃的event不会进入Channel中。
2.Flume数据流
(1)Flume的核心是把数据从数据源收集过来,然后送到目的地。为了保障输送一定成功,在送到目的地之前,会先缓存数据,待数据真正到达目的地之后,再删除自己缓存的数据
(2)Flume传输数据的基本单位是Event,如果是文本文件,通常是一行记录,这也是事务的基本单位,Event是从source流向Channel再到Sink
(3)b本身为一个byte数组,并且可以携带headers信息。Event代表着一个数据的最小的完整单元,从外部数据源来,向外部目的地去。
值得注意的是,Flume提供了大量内置的Source、Channel和Sink类型。不同类型的Source,Channel和Sink可以自由组合。组合方式基于用户设置的配置文件,非常灵活。
比如:Channel可以把事件暂存在内存里,也可以持久化到本地硬盘上。Sink可以把日志写入HDFS, HBase,甚至是另外一个Source等等。Flume支持用户建立多级流,
也就是说,多个agent可以协同工作,并且支持Fan-in、Fan-out、Contextual Routing、Backup Routes,这也正是Flume强大之处。如下图所示:
七、Flume使用场景
1.多个agent顺序连接
可以将多个Agent顺序连接起来,将最初的数据源经过收集,存储到最终的存储系统中。这是最简单的情况,一般情况下,应该控制这种顺序连接的
Agent 的数量,因为数据流经的路径变长了,如果不考虑failover的话,出现故障将影响整个Flow上的Agent收集服务。
2.多个agent的数据汇聚到一个Agent上
这种情况应用的场景比较多,比如要收集Web网站的用户行为日志, Web网站为了可用性使用的负载集群模式,每个节点都产生用户行为日志,可以为
每 个节点都配置一个Agent来单独收集日志数据,然后多个Agent将数据最终汇聚到一个用来存储数据存储系统,如HDFS上。
3.多级流
Flume还支持多级流,什么多级流?结合在云开发中的应用来举个例子,当syslog, java, nginx、 tomcat等混合在一起的日志流开始流入一个agent
后,可以agent中将混杂的日志流分开,然后给每种日志建立一个自己的传输通道。
flume复习(二)的更多相关文章
- 第1节 flume:15、flume案例二,通过自定义拦截器实现数据的脱敏
1.7.flume案例二 案例需求: 在数据采集之后,通过flume的拦截器,实现不需要的数据过滤掉,并将指定的第一个字段进行加密,加密之后再往hdfs上面保存 原始数据与处理之后的数据对比 图一 ...
- Flume(二)Flume的Source类型
一.概述 官方文档介绍:http://flume.apache.org/FlumeUserGuide.html#flume-sources 二.Flume Sources 描述 2.1 Avro So ...
- Flume系列二之案例实战
Flume案例实战 写在前面 通过前面一篇文章http://blog.csdn.net/liuge36/article/details/78589505的介绍我们已经知道flume到底是什么?flum ...
- flume复习(一)
关于flume官方文档介绍可以去:http://flume.apache.org/看看.接下来就介绍一下关于我个人对flume的理解 一.flume介绍: 1.flume是一个分布式.可靠.和高可用的 ...
- C#复习二(Twenty First Day)
呵呵,又来到了今天的总结.这次主要复习了一下字符串的一些处理.今天就来总结一下. 理论: String 字符串,字符串可以看成字符数组,不可变特性(通过for循环,修改string中的元素,失败!) ...
- JAVA基础部分复习(二、集合类型)
对于这些常用的集合,建议还是需要先了解一下底层实现原理,这样在不同的使用场景下才能选择更好的方案. Set介绍以及对比,常用方法: package cn.review.day02; import ja ...
- C语言复习---二维数组和二级指针的关系:没关系,别瞎想(重点)
前提:一维数组和一维指针为什么可以替换使用? ] = { , , }; int *p = a; ; i < ; i++) printf("%d ", *(p + i)); 上 ...
- vue复习(二)
一.组件介绍 每一个组件都是一个vue实例 每个组件均具有自身的模板template,根组件的模板就是挂载点 每个组件模板只能拥有一个根标签 子组件的数据具有作用域,以达到组件的复用 二.局部组件 & ...
- 洛谷 P1509 找啊找啊找GF(复习二维费用背包)
传送门 题目背景 "找啊找啊找GF,找到一个好GF,吃顿饭啊拉拉手,你是我的好GF.再见." "诶,别再见啊..." 七夕...七夕...七夕这个日子,对于sq ...
随机推荐
- ajax+php (jquery.form插件)实现异步文件上传
<!DOCTYPE html> <html lang="CN"> <head> <title>upload model</ti ...
- python全栈开发第6天
作业一:1) 开启Linux系统前添加一块大小为15G的SCSI硬盘 2) 开启系统,右击桌面,打开终端 3) 为新加的硬盘分区,一个主分区大小为5G,剩余空间给扩展分区,在扩展分区上划分1个逻辑分区 ...
- vsftpd 配置上传失败553
1查看ftp服务 ftp://ftpuser:123456@10.11.102.58:8023 2 getsebool -a | grep ftp 临时关闭 [root@xuegod63~]# get ...
- 装机、做系统必备:秒懂MBR和GPT分区表____转载网络
装机.做系统必备:秒懂MBR和GPT分区表 科技美学 2016-10-17 16:36:23 阅读(3835) 评论(4) 很多网友询问MBR和GPT的问题,涉及到硬盘操作系统的安装,其实除了MBR和 ...
- XAMPP是什么?
XAMPP=Apache + MySQL + PHP + Perl,是一个完全免费,易于安装和使用Apache发行版,包含了Apache.MySQL.PHP和Perl.支持Windows.Linux和 ...
- go get命令在go mod目录下与正常目录执行的区别
转载自https://www.jianshu.com/p/0a2ebb07da54 非$GOPATH目录下的go mod项目 $ go mod init test $ cat go.mod modul ...
- [log4j]SLF4J+log4j的使用
使用log4j有两种方法,一种是直接使用log4j jar包,另一种是本文介绍的SLF4J+log4j的使用 概念 SLF4J:即简单日志门面(Simple Logging Facade fo ...
- 将序列化成json格式后日期(毫秒数)转成日期格式
System.Web.Script.Serialization.JavaScriptSerializer jss = new System.Web.Script.Serialization.JavaS ...
- ES 知识点
一.ES基于_version 进行乐观锁并发控制 post /index/type/id/_update?retry_on_conflict=5&version=6 1.内部版本号 第一次创建 ...
- 怎样将DataGrip连接到MS SQL Server?
DataGrip支持几乎所有主流的关系数据库产品,如DB2.Derby.H2.MySQL.Oracle.PostgreSQL.SQL Server.Sqllite及Sybase等,并且提供了简单易用的 ...