Flume知识点总结

flume组成架构

source数据输入端的常见类型有:
spooling directory(读文件夹里的数据)
exec(执行linux命令)–常见的有 tail -F 文件 监听一个文件里变化(其中-F是挂掉后会重试,-f是挂掉后不会重试)
syslog监听日志文件的
avro 序列化的
netcat
两类事务:
第一类:从source到channel叫put事务
transaction中doput()方法将批数据先写入临时缓冲区putlist()方法
doCommit:检查channel内存队列是否足够合并
doRollback()方法:channel内存队列空间不足,回滚数据
第二类:从channel到sink叫take事务
batch data----批处理,批数据
Flume知识点总结_第1张图片
注意:
1.Agent是一个JVM进程,它以事件的形式将数据从源头送至目的,是Flume数据传输的基本单元。
Agent主要有3个部分组成,Source、Channel、Sink。
2.Source是负责接收数据到Flume Agent的组件。Source组件可以处理各种类型、各种格式的日志数据,包括avro、thrift、exec、jms、spooling directory、netcat、sequence generator、syslog、http、legacy。
3.Channel是位于Source和Sink之间的缓冲区。因此,Channel允许Source和Sink运作在不同的速率上。Channel是线程安全的,可以同时处理几个Source的写入操作和几个Sink的读取操作。
Flume自带两种Channel:Memory Channel和File Channel。
Memory Channel是内存中的队列。Memory Channel在不需要关心数据丢失的情景下适用。如果需要关心数据丢失,那么Memory Channel就不应该使用,因为程序死亡、机器宕机或者重启都会导致数据丢失。
File Channel将所有事件写到磁盘。因此在程序关闭或机器宕机的情况下不会丢失数据。
4.Sink不断地轮询Channel中的事件且批量地移除它们,并将这些事件批量写入到存储或索引系统、或者被发送到另一个Flume Agent。
Sink是完全事务性的。在从Channel批量删除数据之前,每个Sink用Channel启动一个事务。批量事件一旦成功写出到存储系统或下一个Flume Agent,Sink就利用Channel提交事务。事务一旦被提交,该Channel从自己的内部缓冲区删除事件。
Sink组件目的地包括hdfs、logger、avro、thrift、ipc、file、null、HBase、solr、自定义。

Flume Agent内部原理

Flume知识点总结_第2张图片

Flume企业开发案例

(1) 案例需求:首先,Flume监控本机44444端口,然后通过telnet工具向本机44444端口发送消息,最后Flume将监听的数据实时显示在控制台。
(2)需求分析:
Flume知识点总结_第3张图片
安装Telnet工具
将rpm软件包
xinetd-2.3.14-40.el6.x86_64.rpm、
telnet-0.17-48.el6.x86_64.rpm和telnet-server-0.17-48.el6.x86_64.rpm
拷入/opt/software文件夹下面。
执行RPM软件包安装命令:

[atguigu@hadoop102 software]$ sudo rpm -ivh xinetd-2.3.14-40.el6.x86_64.rpm
[atguigu@hadoop102 software]$ sudo rpm -ivh telnet-0.17-48.el6.x86_64.rpm
[atguigu@hadoop102 software]$ sudo rpm -ivh telnet-server-0.17-48.el6.x86_64.rpm
注意:
Linux sudo命令以系统管理者的身份执行指令,也就是说,经由 sudo 所执行的指令就好像是 root 亲自执行。(但是我用的是root,哈哈)

判断44444端口是否被占用

[atguigu@hadoop102 flume-telnet]$ sudo netstat -tunlp | grep 44444
功能描述:netstat命令是一个监控TCP/IP网络的非常有用的工具,它可以显示路由表、实际的网络连接以及每一个网络接口设备的状态信息。 
基本语法:netstat [选项]
选项参数:
	-t或--tcp:显示TCP传输协议的连线状况; 
    -u或--udp:显示UDP传输协议的连线状况;
	-n或--numeric:直接使用ip地址,而不通过域名服务器; 
	-l或--listening:显示监控中的服务器的Socket; 
	-p或--programs:显示正在使用Socket的程序识别码和程序名称;

实时读取本地文件到HDFS
1)案例需求:实时监控Hive日志,并上传到HDFS中(这个是hive日志,真实开发中是Tomcat中产生的各种日志比如说是用户行为日志–点击流日志等等!!)
2)需求分析:
Flume知识点总结_第4张图片
Flume知识点总结_第5张图片
Flume知识点总结_第6张图片
在这里插入图片描述
hdfs删除文件
在这里插入图片描述
实时读取目录文件到HDFS案例
1)案例需求:使用Flume监听整个目录的文件
2)需求分析:

Flume知识点总结_第7张图片
Flume知识点总结_第8张图片
单数据源多出口案例(选择器)
1)案例需求:使用Flume-1监控文件变动,Flume-1将变动内容传递给Flume-2,Flume-2负责存储到HDFS。同时Flume-1将变动内容传递给Flume-3,Flume-3负责输出到Local FileSystem。
2)需求分析:
Flume知识点总结_第9张图片
单数据源多出口案例(Sink组)
1)案例需求:使用Flume-1监控文件变动,Flume-1将变动内容传递给Flume-2,Flume-2负责存储到HDFS。同时Flume-1将变动内容传递给Flume-3,Flume-3也负责存储到HDFS
2)需求分析:
Flume知识点总结_第10张图片
多数据源汇总案例
1) 案例需求:
hadoop103上的Flume-1监控文件/opt/module/group.log,
hadoop102上的Flume-2监控某一个端口的数据流,
Flume-1与Flume-2将数据发送给hadoop104上的Flume-3,Flume-3将最终数据打印到控制台。
2)需求分析:
Flume知识点总结_第11张图片
Flume监控之Ganglia
Flume知识点总结_第12张图片
图例说明:

EventPutAttemptCount	   source尝试写入channel的事件总数量
EventPutSuccessCount	   成功写入channel且提交的事件总数量
EventTakeAttemptCount	   sink尝试从channel拉取事件的总数量。这不意味着每次事件都被返回,因为sink拉取的时候channel可能没有任何数据。
EventTakeSuccessCount	   sink成功读取的事件的总数量
StartTime	               channel启动的时间(毫秒)
StopTime	               channel停止的时间(毫秒)
ChannelSize	               目前channel中事件的总数量
ChannelFillPercentage	   channel占用百分比
ChannelCapacity  	       channel的容量

Flume高级之自定义MySQLSource
真实面试题(重点)
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
Exec spooldir
3.Flume的Channel Selectors
Flume知识点总结_第13张图片
4.Flume参数调优

  1. Source(多个flume或者增大batchSiz)
    增加Source个(使用Tair Dir Source时可增加FileGroups个数)可以增大Source的读取数据的能力。例如:当某一个目录产生的文件过多时需要将这个文件目录拆分成多个文件目录,同时配置好多个Source 以保证Source有足够的能力获取到新产生的数据。
    batchSize参数决定Source一次批量运输到Channel的event条数,适当调大这个参数可以提高Source搬运Event到Channel时的性能。
  2. Channel (增大Capacity 和 transactionCapacity)
    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 (增大batchSize)
    增加Sink的个数可以增加Sink消费event的能力。Sink也不是越多越好够用就行,过多的Sink会占用系统资源,造成系统资源不必要的浪费。
    batchSize参数决定Sink一次批量从Channel读取的event条数,适当调大这个参数可以提高Sink从Channel搬出event的性能。
    5.Flume的事务机制
    Flume的事务机制(类似数据库的事务机制):Flume使用两个独立的事务分别负责从Soucrce到Channel,以及从Channel到Sink的事件传递。比如spooling directory source 为文件的每一行创建一个事件,一旦事务中所有的事件全部传递到Channel且提交成功,那么Soucrce就将该文件标记为完成。同理,事务以类似的方式处理从Channel到Sink的传递过程,如果因为某种原因使得事件无法记录,那么事务将会回滚。且所有的事件都会保持到Channel中,等待重新传递。
    6. Flume采集数据会丢失吗?
    不会,Channel存储可以存储在File中,数据传输自身有事务。

你可能感兴趣的:(flume)