Flume详解与安装实例

本文详细介绍了Apache Flume的各个组件,包括source、channel和sink,以及它们的配置和使用示例。Flume是一个分布式、可靠且可用于有效收集、聚合和移动大量日志数据的系统。文中通过实例演示了Flume的安装、配置和运行,以及如何通过Avro Source、Exec Source等不同类型的source收集数据,使用Memory Channel和File Channel存储数据,以及通过Logger Sink、HDFS Sink等sink将数据发送到目标位置。文章还讨论了Flume的复杂流动模式,如扇入流、扇出流,以及事务机制和拦截器的使用,展示了Flume在日志管理和数据流动中的强大功能。
摘要由CSDN通过智能技术生成

Flume介绍

1、概述
  1. Flume最早是Cloudera提供的日志收集系统,后贡献给Apache
  2. Flume是一个高可用的,高可靠的 、健壮性,分布式的海量日志采集、聚合和传输的系统
  3. Flume支持在日志系统中定制各类数据发送方,用于收集数据(source)
  4. Flume提供对数据进行简单处理,并写到各种数据接受方(可定制)的能力(sink)。
2、版本
  1. Flume0.9X:又称Flume-og,老版本的flume,需要引入zookeeper集群管理,性能也较低(单线程工作)
  2. Flume1.X:又称Flume-ng。新版本需要引入zookeeper,和flume-og不兼容
3、Flume的特性
  1. 可靠性:事务型的数据传递,保证数据的可靠性。一个日志交给flume来处理,不会出现此日志丢失或未被处理的情况
  2. 可恢复性:通道可以以内存或文件的方式实现,内存更快,但不可恢复。文件较慢但提供了可恢复性
4、event事件
一、Flume总体架构图

在这里插入图片描述

二、event 事件
  1. event的相关概念:Flume的核心是把数据从数据源(source)收集过来,在将收集到的数据送到指定的目的地(sink)。为了保证输送的过程一定成功,在送到目的地(sink)之前,会先缓存数据(channel),待数据真正到达目的地(sink)后,flume在删除自己缓存的数据。
  2. 在整个数据的传输的过程中,流动的是event,即事务保证是在event级别进行的。event将传输的数据进行封装,是flume传输数据的基本单位,如果是文本文件,通常是一行记录,event也是事务的基本单位。event从source,流向channel,再到sink,本身为一个字节数组,并可携带headers(头信息)信息。event代表着一个数据的最小完整单元,从外部数据源来,向外部的目的地去。简而言之,在Flume中,每一条日志就会封装成一个event对象
  3. 一个完整的event包括:event headers、event body、event信息(即文本文件中的单行记录),如下所以:
    在这里插入图片描述
    其中event信息就是flume收集到的日记记录。
三、Flume的运行机制
  1. flume运行的核心就是agent,agent本身是一个Java进程
  2. agent里面包含3个核心的组件:source—>channel—>sink,类似生产者、仓库、消费者的架构
  3. source:source组件是专门用来收集数据的,可以处理各种类型、各种格式的日志数据,包括avro、thrift、exec、jms、spooling directory、netcat、sequence generator、syslog、http、legacy、自定义等
  4. channel:source组件把数据收集来以后,临时存放在channel中,即channel组件在agent中是专门用来存放临时数据的——对采集到的数据进行简单的缓存,可以存放在memory、jdbc、file等等
  5. sink:sink组件是用于把数据发送到目的地的组件,目的地包括hdfs、logger、avro、thrift、ipc、file、null、hbase、solr、自定义。
  6. 一个完整的工作流程:source不断的接收数据,将数据封装成一个一个的event,然后将event发送给channel,chanel作为一个缓冲区会临时存放这些event数据,随后sink会将channel中的event数据发送到指定的地方—-例如HDFS等
  7. 注:只有在sink将channel中的数据成功发送出去之后,channel才会将临时event数据进行删除,这种机制保证了数据传输的可靠性与安全性。
四、Flume的复杂流动

多个agent的数据流(多级流动)
在这里插入图片描述
数据流合并(扇入流)
在做日志收集的时候一个常见的场景就是,大量的生产日志的客户端发送数据到少量的附属于存储子系统的消费者agent。例如,从数百个web服务器中收集日志,它们发送数据到十几个负责将数据写入HDFS集群的agent。
在这里插入图片描述

这个可在Flume中可以实现,需要配置大量第一层的agent,每一个agent都有一个avro sink,让它们都指向同一个agent的avro source(强调一下,在这样一个场景下你也可以使用thrift source/sink/client)。在第二层agent上的source将收到的event合并到一个channel中,event被一个sink消费到它的最终的目的地。

数据流复用(扇出流)
Flume支持多路输出event流到一个或多个目的地。这是靠定义一个多路数据流实现的,它可以实现复制和选择性路由一个event到一个或者多个channel。
在这里插入图片描述

上面的例子展示了agent foo中source扇出数据流到三个不同的channel,这个扇出可以是复制或者多路输出。在复制数据流的情况下,每一个event被发送所有的三个channel;在多路输出的情况下,一个event被发送到一部分可用的channel中,它们是根据event的属性和预先配置的值选择channel的。 这些映射关系应该被填写在agent的配置文件中。

一、安装步骤

此处还是用之前搭建的虚拟机进行安装

1. 安装JDK1.6以上,建议JDK1.7或者JDK1.8

在这里插入图片描述

2. 下载/上传flume的安装包

在这里插入图片描述

3. 解压安装
tar -xvf apache-flume-1.6.0-bin.tar.gz 
4. 在conf目录下,创建一个配置文件,比如:template.conf(名字可以不固定,后缀也可以不固定),添加如下配置:

在这里插入图片描述
复制粘贴即可,先测试一下,一会详解配置属性含义

#配置Agent a1 的组件
a1.sources=r1
a1.channels=c1 
a1.sinks=s1  

#描述/配置a1的r1
a1.sources.r1.type=netcat  
a1.sources.r1.bind=0.0.0.0  
a1.sources.r1.port=44444  
	
#描述a1的s1
a1.sinks.s1.type=logger   

#描述a1的c1
a1.channels.c1.type=memory
a1.channels.c1.capacity=1000
a1.channels.c1.transactionCapacity=100
	
#为channel 绑定 source和sink
a1.sources.r1.channels=c1  
a1.sinks.s1.channel=c1 

5. 进入flume的bin目录执行: ./flume-ng agent -n a1 -c …/conf -f …/conf/template.conf -Dflume.root.logger=INFO,console
6. 新打开一个窗口通过nc来访问:

输入nc如果是这样的话
在这里插入图片描述
这是没有安装nc,需要安装一下

yum install -y nc

下面开始测试一下flume

	nc localhost 44444
	hello
	nihao
	123456789

通过nc请求flume已经返回OK
在这里插入图片描述
看一下之前启动flume的窗口,已经收到了
在这里插入图片描述
或者通过外部http请求访问对应的ip和端口,比如:http://192.168.199.11:44444/123123
在这里插入图片描述
在虚拟机这边,会出现如下提示:
在这里插入图片描述

二、启动命令

参数 描述
agent 运行一个Flume Agent
–conf,-c 指定配置文件放在什么目录
–conf-file,-f 指定配置文件,这个配置文件必须在全局选项的–conf参数定义的目录下
–name,-n Agent的名称,注意:要和配置文件里的名字一致。
-Dproperty=value 设置一个JAVA系统属性值。常见的:-Dflume.root.logger=INFO,console

参数 描述
agent 运行一个Flume Agent
–conf,-c 指定配置文件放在什么目录
–conf-file,-f 指定配置文件,这个配置文件必须在全局选项的–conf参数定义的目录下
–name,-n Agent的名称,注意:要和配置文件里的名字一致。
-Dproperty=value 设置一个JAVA系统属性值。常见的:-Dflume.root.logger=INFO,console

示例:./flume-ng agent -n a1 -c …/conf -f …/conf/template.conf -Dflume.root.logger=INFO,console

通过以上的介绍我们知道有三个重要组件分别为source、channel、sink以下先详解每一个组件,在结合组件做实例

一、source 详解总共6个

1、Avro Source详解(使用率极高)
一、概述
  1. 监听Avro 端口来接收外部avro客户端的事件流
  2. avro-source接收到的是经过avro序列化后的数据,然后反序列化数据继续传输。
  3. 源数据必须是经过avro序列化后的数据
  4. 利用Avro source可以实现多级流动、扇出流、扇入流等效果
  5. 可以接收通过flume提供的avro客户端发送的日志信息
二、可配选项说明
配置项 说明
channels 绑定通道
type avro
bind 需要监听的主机名或IP
port 要监听的端口
threads 工作线程最大线程数
selector.* 选择器配置
interceptors.* 拦截器配置
三、简单示例
  1. 在conf文件夹下新建配置文件:avrosource.conf
  2. 添加如下内容:
#配置Agent a1 的组件
a1.sources=r1
a1.channels=c1
a1.sinks=s1
	
#描述/配置a1的source1
a1.sources.r1.type=avro  
a1.sources.r1.bind=0.0.0.0
a1.sources.r1.port=44444
	
#描述sink
a1.sinks.s1.type=logger

#描述内存channel
a1.channels.c1.type=memory
a1.channels.c1.capacity=1000
a1.channels.c1.transactionCapacity=100

#为channel 绑定 source和sink
a1.sources.r1.channels=c1
a1.sinks.s1.channel=c1
  1. 执行启动指令,如果出现如下提示,证明启动成功
./flume-ng agent -n a1 -c ../conf -f ../conf/avrosource.conf  -Dflume.root.logger=INFO,console

在这里插入图片描述
4. 在flume根目录创建mydata文件夹,在mydata内创建1.txt,写一个Hello然后保存退出
5.
6. 在bin目录执行agent-avro客户端指令:./flume-ng avro-client -H 0.0.0.0 -p 44444 -F …/mydata/1.txt -c …/conf/
在这里插入图片描述
可以看到文件内的hello反序列化到Flume中

2、Exec Source详解(使用率中)
一、概述
  1. 可以将命令产生的输出作为源来进行传递,例如捕获ping命令
二、可配置选项说明
配置项 说明
channels 绑定的通道
type exec
command 要执行的命令
selector.* 选择器配置
interceptors.* 拦截器列表配置
三、示例:
  1. 在conf文件夹下新建配置文件:execsource.conf
  2. 添加如下内容:
#配置Agent a1 的组件
a1.sources=r1
a1.channels=c1
a1.sinks=s1
	
#描述/配置a1的source1
a1.sources.r1.type=exec  
a1.sources.r1.command=ping www.baidu.com
	
#描述sink
a1.sinks.s1.type&#
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值