0%

flume简介

flume简介

flume是Cloudera提供的高可用的、高可靠的、分布式的海量日志采集、聚合和传输的系统。基于流式架构

我下载的最新的flume,为1.9.0版本

1
2
3
4
5
6
>flume-ng version 
Flume 1.9.0
Source code repository: https://git-wip-us.apache.org/repos/asf/flume.git
Revision: d4fcab4f501d41597bc616921329a4339f73585e
Compiled by fszabo on Mon Dec 17 20:45:25 CET 2018
From source with checksum 35db629a3bda49d23e9b3690c80737f9

下载之后修改flume-env.sh中的JAVA_HOME即可

Flume NG主要由事件源(Source)、通道(Channel)和接收器(Sink)3个组件组成,由3个组件组成一个代理Agent,一个Flume代理可能包括多个事件源、通道和接收器。

flume

名词解释

事件Event

Flume将一个具有有效负荷的字节数据流和可选的字符串属性集称为事件,一个事件由Header和Body两部分组成,Header中存放event的一些属性,Body用于存放该条数据,形式为字节数组,事件是Flume数据传输的基本单位。

事件源Source

事件源就是负责从数据源采集数据将事件发送到一到多个通道中,是数据流入的入口。常见事件源有文件、网络、数据库、kafka等,官网上列举出来了很多的事件源,而且还可以自定义事件源,不过一般情况下不需要进行自定义

source类型

通道Channel

通道负责将事件源流入的数据进行聚合、暂存,通常数据在通道停留的时间不会太长,是位于事件源与接收器之间的构件。通道主要包括非持久性通道(如内存通道Memory Channel)与持久化通道(如文件通道File Channel、数据库JDBC Channel)

通道类型

对于通道来说还有一个通道的选择器,官方提供了两种选择器,Replicating Channel Selector和Multiplexing Channel Selector,默认使用的是replicating,replicating会将sources中发过来的事件发给所有的channel,Multiplexing可以来配置将事件发给某些channel

1
2
3
4
5
6
7
8
9
a1.sources = r1
# 多个channel
a1.channels = c1 c2 c3 c4
a1.sources.r1.selector.type = multiplexing
# 根据头信息 state的值来进行匹配
a1.sources.r1.selector.header = state
a1.sources.r1.selector.mapping.CZ = c1
a1.sources.r1.selector.mapping.US = c2 c3
a1.sources.r1.selector.default = c4

接收器Sink

接收器负责从通道消费数据,将数据转移到其他存储系统,例如将数据存储到文件、数据库、HDFS、Kafka、HBase等,官网上列举出来了很多的接收器,而且还可以自定义接收器,不过一般情况下不需要进行自定义

sink类型

sink还有一个sink组的概念