概述
- Flume是一个分布式、可靠、和高可用的海量日志采集、聚合和传输的系统。
- Flume可以采集文件,socket数据包、文件、文件夹、kafka等各种形式源数据,又可以将采集到的数据(下沉sink)输出到HDFS、hbase、hive、kafka等众多外部存储系统中
- 一般的采集需求,通过对flume的简单配置即可实现
- Flume针对特殊场景也具备良好的自定义扩展能力,因此,flume可以适用于大部分的日常数据采集场景
应用
- 官方文档: https://flume.apache.org/releases/content/1.11.0/FlumeUserGuide.html
- 流程图
- 示例:
- taildir:实时读取文件的信息,并且支持断点续存
- avro:flume:之间的传输,一般跟avro sink 并用
- nc:接收网络端口
- exec:可用于监控文件,不支持断点续存
- spooling:监控文件夹,支持断点续存
- kafka:
- file:读写慢 ,安全,可以索引
- memory:读写快,容易丢数据
- kafka:
//定义组件
a1.sources = r1 f1
a1.channels = c1
//配置sources
# Describe/configure the source
a1.sources.r1.type = TALLDIR
a1.sources.r1.filegroups = f1
a1.sources.r1.filegroups.f1 = 填写需要监控的文件
a1.sources.r1.positionFile = /usr/local/flume/taildir_position.json
//配置channel
# Use a channel which buffers events in memory
a1.channels.c1.type = org.apache.flume.channel.kafka.KafkaChannel
a1.channels.c1.kafka.bootstrap.servers = hadoop-master:9092,hadoop-slave1:9092,hadoop-slave2:9092
a1.channels.c1.kafka.topic = topic_logv
a1.channels.c1.parseAsFlumeEvent = false //不以FlumeEvent的形式写入
//组装
# Bind the source and sink to the channel
a1.sources.r1.channels = c1
flume bin/flume-ng agent -c conf/ -f 配置文件路径 -n a1 -Dflume.root.logger=info,console
kafka-console-consumer.sh --bootstrap-server hadoop-master:9092 --topic topic_log