flume
1.flume:一个高可用,高可靠的,分布式的海量日志采集,聚合,传输的系统,flume基于流式架构,灵活简单。
2.flume组成架构?
一个flume叫一个agent
Source数据输入端的常见类型有:
文件夹
exec :命令行,执行linux命令, tail -F 文件 监控文件变化
syslog
netcat
avro:序列化
Channel是位于Source和Sink之间的缓冲区
Flume 自带两种Channel:Memory Channel 和File Channel
Memory Channel:基于内存缓存,在不需要关心数据丢失的情景下使用。
File Channel:是Flume的持久化Channel,系统宕机不会丢失数据。
Sink组件常见的目的地包括:
hdfs
kafka
logger
avro
File
自定义
Source -> Channel : 推送事件
Put事务流程:
doput ()-> putList()->doCommit()
doput:将批数据先写入临时缓冲区putList。
doCommit:检查channel内存队列是否足够放入数据。
doRollback:channel内存队列空间已满,回滚数据。
Channel -> Sink : 拉取事件
Take事务
doTake()->takeList()->doCommit()
doTake:先将数据取到临时缓冲区takeList
doCommit:如果数据全部发送成功,则清除临时缓冲区takeList
doRollback:数据发送过程中如果出现异常,rollback将临时缓冲区takeList中的数据归还给channel内存队列。
Agent
Agent是一个JVM进程,它以事件EVENT(形式类似json串形式)的形式将数据从源头送至目的,是Flume数据传输的基本单元。
Agent主要有3个部分组成:Source Channel Sink
Source:
Source是负责接受数据到Flume Agent的组件。Source组件可以处理各种类型,各种格式的日志数据,包括avro,thrift,exec,jms,spooling directory,netcat,sequence generator,syslog,http,legacy
Sink
Sink不断地轮询Channel中的事件且批量地移除它们,并将这些事件批量写入到存储或索引系统,或者发送到另一个Flume Agent。
Event
传输单元,Flume数据传输的基本单元,以事件的形式将数据从源头送至目的地。
Flume Agent内部原理
flume常见面试题
1.你是如何实现Flume数据传输的监控的?
使用第三方框架Ganglia实时监控Flume
2.Flume的Source,Sink,Channel的作用?你们Source是什么类型?
1.作用:
(1)Source组件是专门用来收集数据的,可以处理各种类型,各种格式的日志数据,包括avro,exec,spooling directory,syslog。
(2)channel组件对采集到的数据进行缓存,可以存放在Memory或File中。
(3)Sink组件是用于把数据发送到目的地的组件,目的地包括hdfs,logger,avro,file,kafka
2.我公司采用的Source类型为:
(1)端口为:a1.sources.r1.port = 8514
(2)ip为:a1.sources.r1.bind= 0.0.0.0
(3)接收方式为:a1.sources.r1.type = syslogudp
3.Flume的Channel Selectors?
Channel Selector,可以让不同的项目日志通过不同的
Channel到不同的Sink中去。
官方文档上Channel Selectors 有两种类型:
Repliating Channel Selector(default)和
Multiplexing Channel Selector
这两种Selector的区别是:Replicating会将source过来的events发往所有的channel,而Multiplexing可以选择发往那些Channel。
3.Flume的参数调优?
(1)Source
增加Source个数可以增大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会占用系统资源,造成系统资源不必要的浪费。
bachSize参数决定Sink一次批量从Channel读取的event条数,适当调大这个参数可以提高Sink从Channel搬出event的性能。
4.Flume采集数据会丢失吗?
不会,Channel存储可以存储在File中,数据传输自身有事务。