Flume简介及基本运用(含案例)

1、背景

在这里插入图片描述

2、Flume简介

Flume是日志收集框架,详细来说:Flume是一个分布式、可靠、高可用的海量日志聚合系统,支持在系统中定制各类数据发送方,用于收集数据;同时,Flume可以对数据进行简单处理,并写到各种数据接收方。

3、Flume架构和基本概念

下图为 Flume 的基本架构图:
在这里插入图片描述

3.1 基本架构

外部数据源以特定格式向 Flume 发送 events (事件),当 source 接收到 events 时,它将其存储到一个或多个 channel,channe 会一直保存 events 直到它被 sink 所消费。sink 的主要功能从 channel 中读取 events,并将其存入外部存储系统或转发到下一个 source,成功后再从 channel 中移除 events。

3.2 基本概念

1、Event
Event 是 Flume NG 数据传输的基本单元。类似于 JMS 和消息系统中的消息。一个 Event 由标题和正文组成:前者是键/值映射,后者是任意字节数组。

2、Source
数据收集组件,从外部数据源收集数据,并存储到 Channel 中。

3、Channel
Channel 是源和接收器之间的管道,用于临时存储数据。可以是内存或持久化的文件系统:

  • Memory Channel : 使用内存,优点是速度快,但数据可能会丢失 (如突然宕机);
  • File Channel : 使用持久化的文件系统,优点是能保证数据不丢失,但是速度慢。

4、Sink
Sink 的主要功能从 Channel 中读取 Event,并将其存入外部存储系统或将其转发到下一个 Source,成功后再从 Channel 中移除 Event。

5、Agent
是一个独立的 (JVM) 进程,包含 Source、 Channel、 Sink 等组件。

3.3 组件种类

Flume 中的每一个组件都提供了丰富的类型,适用于不同场景:

  • Source 类型 :内置了几十种类型,如 exec Source、spooling directory source,avro source,taildir source,这几种比较常用;还有,netcat source(一般测试用),http source,kafka source
  • Sink 类型 :HDFS Sink,Hive Sink,HBaseSinks,Avro Sink 等;工作中常用Avro Sink,HDFS Sink,Kafka Sink。
  • Channel 类型 :Memory Channel,JDBC Channel,Kafka Channel,File Channel 等。
    • Memory Channel:event保存在Java Heap中。如果允许数据小量丢失,推荐使用
    • File Channel:event保存在本地文件中,可靠性高,但吞吐量低于Memory Channel
    • JDBC Channel:event保存在关系数据中,一般不推荐使用
    • Kafka Channel

3.4 工作流程

在这里插入图片描述

4、Flume架构模式

Flume 支持多种架构模式,分别介绍如下

4.1 单一流程

在这里插入图片描述

4.2 多代理流程(多个agent顺序连接)

在这里插入图片描述
Flume 支持跨越多个 Agent 的数据传递,这要求前一个 Agent 的 Sink 和下一个 Agent 的 Source 都必须是 Avro 类型,Sink 指向 Source 所在主机名 (或 IP 地址) 和端口。

4.3 流的合并(多个Agent的数据汇聚到同一个Agent )

在这里插入图片描述
日志收集中常常存在大量的客户端(比如分布式 web 服务),Flume 支持使用多个 Agent 分别收集日志,然后通过一个或者多个 Agent 聚合后再存储到文件系统中。

4.4 多路复用流(多级流)

在这里插入图片描述
Flume 支持从一个 Source 向多个 Channel,也就是向多个 Sink 传递事件,这个操作称之为 Fan Out(扇出)。默认情况下 Fan Out 是向所有的 Channel 复制 Event,即所有 Channel 收到的数据都是相同的。同时 Flume 也支持在 Source 上自定义一个复用选择器 (multiplexing selector) 来实现自定义的路由规则。

4.5 load balance功能

在这里插入图片描述
Agent1是一个路由节点,负责将Channel暂存的Event均衡到对应的多个Sink组件上,而每个Sink组件分别连接到一个独立的Agent上 。

5、Flume配置格式

Flume 配置通常需要以下两个步骤:

  • 1、分别定义好 Agent 的 Sources,Sinks,Channels,然后将 Sources 和 Sinks
    与通道进行绑定。需要注意的是一个 Source 可以配置多个 Channel,但一个 Sink 只能配置一个
    Channel。基本格式如下:
<Agent>.sources = <Source>
<Agent>.sinks = <Sink>
<Agent>.channels = <Channel1> <Channel2>

# set channel for source
<Agent>.sources.<Source>.channels = <Channel1> <Channel2> ...

# set channel for sink
<Agent>.sinks.<Sink>.channel = <Channel1>
  • 2、分别定义 Source,Sink,Channel 的具体属性。基本格式如下:
<Agent>.sources.<Source>.<someProperty> = <someValue>

# properties for channels
<Agent>.channel.<Channel>.<someProperty> = <someValue>

# properties for sinks
<Agent>.sources.<Sink>.<someProperty> = <someValue>

启动Agent
bin目录下的flume-ng是Flume的启动脚本,启动时需要指定Agent的名字、配置文件的目录和配置文件的名称。

[root@hadoop20 flume]# ./bin/flume-ng agent --name $agent_name --conf ./conf/ --conf-file ./conf/jobkb09/netcat-flume-logger.conf
# flume-ng:是Flume的启动脚本
# --name $agent_name:要指明agent的名字,可以简写成 -n $agent_name
# --conf ./conf/:需要找到conf目录下的配置文件flume-env.sh,可以简写成 -c conf
# --conf-file ./conf/jobkb09/netcat-flume-logger.conf:需要找到配置文件路径,可以简写成 -f 文件路径

简化后的另一种写法:

[root@hadoop20 flume]# ./bin/flume-ng agent -n a1 -c ./conf/ -f ./conf/jobkb09/netcat-flume-logger.conf

对于 Flume 的使用,除非有特别的需求,否则通过组合内置的各种类型的 Source,Sink 和 Channel 就能满足大多数的需求。在 Flume 官网 (官网是纯英文的,在此提供一份中文版:Flume 1.8用户手册中文版)上对所有类型组件的配置参数均以表格的方式做了详尽的介绍,并附有配置样例;同时不同版本的参数可能略有所不同,所以使用时建议选取官网对应版本的 User Guide 作为主要参考资料。

6、Flume使用案例

6.1 监控端口并输出到控制台

实现:使用NetCat TCP Source

这个source十分像nc -k -l [host] [port]这个命令,监听一个指定的端口,把从该端口收到的TCP协议的文本数据按行转换为Event,它能识别的是带换行符的文本数据,同其他Source一样,解析成功的Event数据会发送到channel中。

提示:常见的系统日志都是逐行输出的,Flume的各种Source接收数据也基本上以行为单位进行解析和处理。

1、配置
在/opt/flume/conf目录下新建测试目录:mkdir jobkb09,在/opt/flume/conf/jobkb09目录下新建配置文件:vi netcat-flume-logger.conf

# 配置Agent a1各个组件的名称
a1.sources=r1
a1.channels=c1
a1.sinks=k1

# 配置source属性
a1.sources.r1.type=netcat   	#使用netcat TCP Source
a1.sources.r1.bind=localhost	#netcat TCP Source监听的hostname或者ip地址,这个是本机
a1.sources.r1.port=7777			#监听的端口

# 配置channel属性,channel是用来缓冲event数据的
a1.channels.c1.type=memory	#channel的类型是内存channel,顾名思义这个channel是使用内存来缓冲数据
a1.channels.c1.capacity=1000
a1.channels.c1.transactionCapacity=1000

# 配置sink属性
a1.sinks.k1.type=logger  #一般用于测试,将event内容输出到日志中

# 把source和sink绑定到channel上
a1.sources.r1.channels=c1
a1.sinks.k1.channel=c1

2、启动agent

[root@hadoop20 flume]# ./bin/flume-ng agent --name a1 --conf ./conf/ --conf-file ./conf/jobkb09/netcat-flume-logger.conf -Dflume.root.logger=INFO,console
# -Dflume.root.logger=INFO,console:指定logger输处形式,INFO级别的控制台(console)输出,只有配置文件中sink的类型是logger才能使用。

3、测试
再打开一个会话,

[root@hadoop20 ~]# telnet localhost 7777

在7777这个端口输入,flume都能监控到。

6.2 监听文件内容,将新增内容输出到控制台

也可以将新增内容采集到HDFS或者Kafka中,案例仅演示输出到控制台。
实现: 主要使用 Exec Source 配合 tail 命令实现

执行Linux指令,并消费指令返回的结果,并不是所有的命令都符合,能产生持续数据流的命令才符合要求,比如cat [named pipe]和tail -F [file]

1、配置
在/opt/flume/conf/jobkb09目录下新建配置文件:vi file-flume-logger.conf

#指定agent的sources,sinks,channels
a2.sources
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值