Day04_02_Flume日志采集系统

Flume日志采集系统

一、概述

1、Flume是Cloudera提供的日志收集系统,后来贡献给了Apache

2、Flume是分布式的、可信赖的、可获取的服务基于高效的收集、移动或者传输大量的日志数据

3、到目前为止:Flume0.9x和Flume1.x — 两个版本完全不兼容

二、Flume的基本架构

1、Flume是web服务器上的日志传输到HDFS,中间就是Flume需要处理的阶段

2、重要概念:

​ ①event事件:Flume本身是收集日志的,它将每一条日志封装成event事件

​ ②event是Flume收集数据的基本单位

​ ③event事件是从Source流向Channel再到Sink — 本身是一个字节数组

3、日志的特点是以JSON的形式体现的

4、Flume而言传输利用的是Agent对象 — Flume运行核心(Java进程)

5、Source是数据的来源,Channel是数据的缓存,Sink是数据的目的地

1741920941048

三、流动方式

1、单级流动

1741921116514

2、多级流动

1741921212387

3、扇出流动

1741921320494

4、扇入流动

1741921455569

四、入门案例

1、上传压缩包并解压

1
tar -xvf apache-flume-1.6.0-bin.tar.gz -C /home/software/

2、配置文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
# agent起个名称
# 绑定来源,因为来源会有多个
a1.sources=r1
# 绑定通道,因为有扇出流动
a1.channels=c1
# 绑定目的地,因为扇出流动有多个目的地
a1.sinks=s1

# 配置Source
# 通过Netcat发送HTTP请求获取数据
a1.sources.r1.type=netcat
# 表示从本地获取数据
a1.sources.r1.bind=0.0.0.0
# 绑定端口号
a1.sources.r1.port=8090

# 配置Channel
# 表示内存通道
a1.channels.c1.type=memory
# 最多能够存储1000条数据,对应了1000个event事件
a1.channels.c1.capacity=1000
# 每次提供100条数据发送给Sink
a1.channels.c1.transactionCapacity=100

# 配置Sink
# 表示以日志的形式打印输出在控制台
a1.sinks.s1.type=logger

# Channel和Sink以及Source之间的绑定
# 给r1的source绑定一个通道(可以绑定多个)
a1.sources.r1.channels=c1
# 给s1绑定一个通道
a1.sinks.s1.channel=c1

3、配置完成之后进入bin目录,执行启动命令:

1
sh flume-ng agent --name a1 -c ../conf/ -f ../data/basic.conf -Dflume.root.logger=INFO,console

五、常用Source

1、netcat — 数据的形式是通过TCP请求接受或者发送,接受的只能是字符串形式的数据

2、AVRO — 要求接受到的数据必须经过AVRO序列化后的数据之后就可以通过AVRO进行反序列化操作

3、Spooling Directory — 监听指定的某一个目录,监听的目录一定要提前存在

4、HTTP — 表示接受HTTP的GET和POST请求作为Flume的源头

六、常用Channel

1、Memory Channel — 内存通道,在内存中以队列的形式存储的

​ ①capacity — 表示这个Channel能够存储多少条数据,在实际开发中建议调节为10W左右

​ ②transactionCapacity — 表示每次给Sink多少条数据,即意味着一次性传输多少条数据,根据实际开发中一般

建议调节为1000~3000左右

2、JDBC Channel — 表示把数据存储在数据库中 – 仅在测试环境中使用

​ 注意:Flume到目前为止支持的数据库有且只有一个:Derby文件型数据库

3、File Channel — 文件通道,IO读写,性能低

4、内存溢出通道 — 官方未正式推出(测试阶段)

七、常用Sink

1、Logger Sink — 表示以日志的形式进行输出打印在控制台,要求在conf目录下必须有log4j.properties文件

2、File Roll Sink — 将日志写到本地文件中

3、HDFS Sink — 将日志写到分布式文件系统

4、AVRO Sink — 实现多级流动、扇入流动、扇出流动的基础(至少需要两个节点)