Flume

Flume

一、定义

Flume是一个高可用的,高可靠的,分布式海量日志采集、聚合和传输的系统

Flume基于流式架构,灵活简单

Flume最主要的作用就是,实时读取服务器本地磁盘的数据,将数据写入到HDFS中

在这里插入图片描述

二、组成架构

1 架构图

在这里插入图片描述Tips:

​ 数据流动是batch
​ Source端不是直接将数据传给Channel,而是将数据经过临时缓存(Transaction) 再传给Channel。从Source到Channel的数据传输方式是----put(推送事件),包含方法doPut,putList,doCommit

Put事务流程
●doPut:将批数据先写入临时缓冲区putList
●doCommit:检查channel内存队列是否足够合并
●doRollback:channel内存队列空间不足,回滚数据

​ 同样的理论,Channel和sink也存在,数据传输的方式是take(拉取事件),包含方法doTake,takeList,doCommit

Take事务
●doTake:先将数据取到临时缓冲区takeList
●doCommit:如果数据全部发送成功,则清除临时缓冲区takeList
●doRollback:数据发送过程中如果出现异常, rollback将临时缓冲区takeL ist中的数据归还给channel内存队列

2 组件

1)Agent

​ Agent是一个JVM进程,它以事件的形式将数据从源头送至目的,是Flume数据传输的基本单元

​ Agent主要有3个部分组成,Source、Channel、Sink

2) Source

​ Source是负责接收数据到Flume Agent的组件

​ Source组件可以处理各种类型、各种格式的日志数据,包括avro、thrift、exec、jms、spooling directory、netcat、sequence generator、syslog、http、legacy

3) Channel

​ 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

​ Sink不断地轮询Channel中的事件且批量地移除它们,并将这些事件批量写入到存储或索引系统、或者被发送到另一个Flume Agent

​ Sink是完全事务性的。在从Channel批量删除数据之前,每个Sink用Channel启动一个事务。批量事件一旦成功写出到存储系统或下一个Flume Agent,Sink就利用Channel提交事务。事务一旦被提交,该Channel从自己的内部缓冲区删除事件

​ Sink组件目的地包括hdfs、logger、avro、thrift、ipc、file、null、HBase、solr、自定义

5) Event

​ 传输单元,Flume数据传输的基本单元,以事件的形式将数据从源头送至目的地

3 拓扑图

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

三、Flume Agent内部原理

在这里插入图片描述

1 拦截器

​ 数据在进入Channel前,可使用拦截器对数据进行调整,例如,编码格式,日志分类,压缩/非压缩等

​ 在使用拦截器堆数据进行调整后,将数据发送给Channel选择器,由选择器选择发送方式

2 Channel选择器

​ Channel选择器(Channel Selectors) 有两种类型:

​ ReplicatingChannel Selector (default) 和 MultiplexingChannel Selector

​ Replicating 会将source过来的events发往所有Channel

​ Multiplexing 可以配置发往哪些Channel

四、Flume参数调优

1 Source

​ 增加Source个数(使用Tair Dir Source时可增加FileGroups个数),可以增大Source的读取数据的能力

​ batchSize参数决定Source一次批量运输到Channel的event条数,适当调大这个参数可以提高搬运性能

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条数,适当调大这个参数可以提高搬出性能

五、Flume自定义MySQLSource

​ 官方提供的source类型已经很多,但是有时候并不能满足实际开发当中的需求,此时我们就需要根据实际需求自定义某些Source。如:实时监控MySQL,从MySQL中获取数据传输到HDFS或者其他存储框架

详情在word文档
MySQLSource

​ 官方提供的source类型已经很多,但是有时候并不能满足实际开发当中的需求,此时我们就需要根据实际需求自定义某些Source。如:实时监控MySQL,从MySQL中获取数据传输到HDFS或者其他存储框架

详情在word文档

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值