Flume的学习

一、Flume概述

1.1 Flume定义

Flume 是 Cloudera 提供的一个高可用的,高可靠的,分布式的海量日志采集、聚合和传输的系统。Flume 基于流式架构,灵活简单。Flume最主要的作用就是,实时读取服务器本地磁盘的数据,将数据写入到HDFS。

1.2 Flume基础架构

1.2.1 Agent

Agent 是一个 JVM 进程,它以事件的形式将数据从源头送至目的。 Agent 主要有 3 个部分组成,Source、Channel、Sink。

1.2.2 Source

Source 是负责接收数据到 Flume Agent 的组件。Source 组件可以处理各种类型、各种格式的日志数据,包括 avro、thrift、exec、jms、spooling directory、netcat、taildir、sequence generator、syslog、http、legacy。

1.2.3 Sink

Sink 不断地轮询 Channel 中的事件且批量地移除它们,并将这些事件批量写入到存储或索引系统、或者被发送到另一个 Flume Agent。 Sink 组件目的地包括 hdfs、logger、avro、thrift、ipc、file、HBase、solr、自定义。

1.2.4 Channel

Channel 是位于 Source 和 Sink 之间的缓冲区。因此,Channel 允许 Source 和 Sink 运作在不同的速率上。Channel 是线程安全的,可以同时处理几个 Source 的写入操作和几个Sink 的读取操作。
Flume 自带两种 Channel:Memory Channel 和 File Channel。
Memory Channel 是内存中的队列。Memory Channel 在不需要关心数据丢失的情景下适用。如果需要关心数据丢失,那么 Memory Channel 就不应该使用,因为程序死亡、机器宕机或者重启都会导致数据丢失。
File Channel 将所有事件写到磁盘。因此在程序关闭或机器宕机的情况下不会丢失数据。

1.2.5 Event

传输单元,Flume 数据传输的基本单元,以 Event 的形式将数据从源头送至目的地。Event 由 Header 和 Body 两部分组成,Header 用来存放该 event 的一些属性,为 K-V 结构,Body 用来存放该条数据,形式为字节数组。

二、Flume入门

2.1 Flume 安装部署

首先打开Hadoop102虚拟机,将flume的压缩包上传上去。输入命令:tar -zxvf apache-flume-1.9.0-bin.tar.gz解压压缩包,解压完成后输入命令:mv apache-flume-1.9.0-bin/ flume-1.9.0/进行改名,下面进入到flume的lib目录下输入命令:rm guava-11.0.2.jar删除该jar包,避免和hadoop下的包产生冲突。emmm,这就安装完成了哈哈。

2.2 官方示例

1. 首先创建一个 fileName.conf 配置文件,内容示例:

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

2. 下面就可以开启 flume 监听端口:

# 第一种写法:
bin/flume-ng agent --conf conf/ --name a1 --conf-file job/fileName.conf 
-Dflume.root.logger=INFO,console
# 第二种写法:
bin/flume-ng agent -c conf/ -n a1 -f job/fileName.conf 
-Dflume.root.logger=INFO,console
# 注:以上两种写法都是在flume的目录下输入。

参数说明:
--conf/-c:表示配置文件存储在 conf/目录;
--name/-n:表示给 agent 起名为 a1;
--conf-file/-f:flume 本次启动读取的配置文件是在 job 文件夹下的 fileName.conf文件(就是上面刚刚创建的文件)。
-Dflume.root.logger=INFO,console :-D 表示 flume 运行时动态修改 flume.root.logger 参数属性值,并将控制台日志打印级别设置为 INFO 级别。日志级别包括:log、info、warn、error。

3. 输入上面的命令来执行配置文件,这样就可以监控数据了。

2.3、案例

1. 监控某一个日志文件并存储到hdfs中
source:exec类型,sink:hdfs类型,channel:memory类型;
使用范围:适用于监控一个实时追加的文件,不能实现断点续传。

2. 监控某个目录下的文件变化并存储到hdfs中
source:spooldir类型,sink:hdfs类型,channel:memory类型;
使用范围:适合用于同步新文件,但不适合对实时追加日志的文件进行监听并同步。

3. 监控目录下的多个文件并存储到hdfs中
source:taildir类型,sink:hdfs类型,channel:memory类型;
使用范围:可以监控目录下的多个文件,也可以对追加的文件进行监控并同步。

三、Flume进阶

3.1 Flume事务


1. put事务:

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

2. Take事务

  • doTake:将数据取到临时缓冲区takeList,并将数据发送到HDFS;
  • doCommit:如果数据全部发送成功,则清除临时缓冲区takeList;
  • doRollback:数据发送过程中如果出现异常,rollback将临时缓冲区takeList中的数据归还给channel内存队列。

3.2 Flume Agent内部原理


1. ChannelSelector
ChannelSelector 的作用就是选出 Event 将要被发往哪个 Channel。其共有两种类型,分别是 Replicating(复制)和 Multiplexing(多路复用)。ReplicatingSelector 会将同一个 Event 发往所有的 Channel,Multiplexing 会根据相应的原则,将不同的 Event 发往不同的 Channel。
2. SinkProcessor
SinkProcessor 共有三种类型,分别是 DefaultSinkProcessorLoadBalancingSinkProcessorFailoverSinkProcessor 。 DefaultSinkProcessor 对应的是单个的 Sink ,LoadBalancingSinkProcessor 和 FailoverSinkProcessor 对应的是 Sink Group,LoadBalancingSinkProcessor 可以实现负载均衡的功能,FailoverSinkProcessor 可以实现错误恢复的功能。

3.3 Flume 拓扑结构

3.3.1 简单串联

这种模式是将多个 flume 顺序连接起来了,从最初的 source 开始到最终 sink 传送的目的存储系统。此模式不建议桥接过多的 flume 数量, flume 数量过多不仅会影响传输速率,而且一旦传输过程中某个节点 flume 宕机,会影响整个传输系统。

3.3.2 复制和多路复用

Flume 支持将事件流向一个或者多个目的地。这种模式可以将相同数据复制到多个channel 中,或者将不同数据分发到不同的 channel 中,sink 可以选择传送到不同的目的地。

3.3.3 负载均衡和故障转移

Flume支持使用将多个sink逻辑上分到一个sink组,sink组配合不同的SinkProcessor可以实现负载均衡和错误恢复的功能。

3.3.4 聚合

这种模式是我们最常见的,也非常实用,日常 web 应用通常分布在上百个服务器,大者甚至上千个、上万个服务器。产生的日志,处理起来也非常麻烦。用 flume 的这种组合方式能很好的解决这一问题,每台服务器部署一个 flume 采集日志,传送到一个集中收集日志的flume,再由此 flume 上传到 hdfs、hive、hbase 等,进行日志分析。

更多详细内容详见官方文档https://flume.apache.org/FlumeUserGuide.html

posted @ 2023-08-16 22:25  KongLong_cm  阅读(6)  评论(0编辑  收藏  举报