Flume简介
- Flume用于将多种来源的日志以流的方式传输至Hadoop或者其他目的地
- 一种可靠、可用的高效分布式数据收集服务 - Flume拥有基于数据流上的简单灵活架构,支持容错、故障转移与恢复
- 由Cloudera 2009年捐赠给Apache,现为Apache顶级项目
Flume架构
- Client:客户端,数据产生的地方,如Web服务器
- Event:事件,指通过Agent传输的单个数据包,如日志数据通常对应一行数据
- Agent:代理,一个独立的JVM进程
- Flume以一个或多个Agent部署运行
- Agent包含三个组件
- Source
- Channel
- Sink

Flume工作流程:

因为Flume的配置每种文件源、管道、输出在官网上都有详细的讲解和配置案例,搭配过多,我这里就不一一展示,仅展示一些工作中经常用的案例
source(源)
Spooling Directory Source
从磁盘文件夹中获取文件数据,可以避免重启或者发送失败后数据丢失,还可以用于监控文件夹新文件
| 属性 | 缺省值 | 描述 |
|---|---|---|
| Type | - | spooldir |
| spoolDir | - | 需要读取的文件夹的路径 |
| fileSuffix | .COMPLETED | 文件读取完成后添加的后缀 |
| deletePolicy | never | 文件完成后删除策略:never和immediate |
Http源
用于接收HTTP的GET和POST请求
| 属性 | 缺省值 | 描述 |
|---|---|---|
| Type | - | http |
| port | - | 监听的端口号 |
| bind | 0.0.0.0 | 绑定IP |
| handler | org.apache.flume.source.http.JSONHandler | 数据处理程序类全名 |
avro源
监听Avro端口,并从外部Avro客户端接收events
| 属性 | 缺省值 | 描述 |
|---|---|---|
| Type | - | avro |
| bind | - | 绑定IP地址 |
| port | - | 端口 |
| threads | - | 最大工作线程数量 |
Channel(管道)
Memory Channel
event保存在Java Heap中,如果允许数据小量丢失,推荐使用
File Channel
event保存在本地文件中,可靠性高,但吞吐量低于Memory Channel
JDBC Channel
event保存在关系数据库中,一般不推荐使用
Kafka Channel
Sinks(输出)
avro sink
作为avro客户端向avro服务端发送avro事件
| 属性 | 缺省值 | 描述 |
|---|---|---|
| Type | - | avro |
| bind | - | 绑定IP地址 |
| port | - | 端口 |
| batch-size | 100 | 批量发送事件数量 |
HDFS sink
将事件写入Hadoop分布式文件系统
| 属性 | 缺省值 | 描述 |
|---|---|---|
| Type | - | hdfs |
| hdfs.path | - | hdfs文件目录 |
| hdfs.filePrefix | FlumeData | 文件前缀 |
| hdfs.fileSuffix | - | 文件后缀 |
Hive sink
- 包含分隔文本或Json数据流事件直接进入Hive表或分区
- 传入的事件数据字段映射到Hive表中相应的列
| 属性 | 缺省值 | 描述 |
|---|---|---|
| Type | - | hive |
| hive.metastore | - | Hive metastore URI |
| hive.database | - | Hive数据库名称 |
| hive.table | - | Hive表名 |
| serializer | - | 序列化器负责从事件中分析出字段并将它们映射为Hive表中的列。序列化器的选择取决于数据的格式。支持序列化器的格式:DELIMITED和JSON |
HBase sink
| 属性 | 缺省值 | 描述 |
|---|---|---|
| Type | - | hbase |
| table | - | 要写入的Hbase表名 |
| columnFamily | - | 要写入的Hbase列簇 |
| zookeeperQuorum | - | 对应hbase.zookeeper.quorum |
| znodeParent | /hbase | zookeeper.znode.parent |
| serializer | org.apache.flume.sink.hbase.SimpleHbaseEventSerializer | 一次事件插入一列 |
| serializer.payloadColumn | - | 列名col1 |
拦截器
- 拦截器可以修改或丢弃事件
- 设置在source和channel之间 - 内置拦截器
- HostInterceptor:在event header中插入“hostname”
- timestampInterceptor:插入时间戳
- StaticInceptor:插入key-value
- UUIDInceptor:插入UUID
下面是我总结了集中工作中常用情况的Agent配置文件的案例
1.监控文件夹,并将结果输出到hdfs上
a2.channels=c2
a2.sources=s2
a2.sinks=k2
a2.sources.s2.type=spooldir
a2.sources.s2.spoolDir=/opt/data
a2.channels.c2.type=memory
//设置该通道中最大可存储的event数量
a2.channels.c2.capacity=10000
//每次从source中拿到的event数量
a2

本文详细介绍了Flume,一种高效、可靠的分布式日志收集系统。Flume支持多种数据源,包括文件、HTTP和Avro,数据通过管道传输至HDFS、Kafka等目的地。文章还提供了多个实用配置案例,帮助读者快速上手。
最低0.47元/天 解锁文章
957

被折叠的 条评论
为什么被折叠?



