Flume是一个分布式、可靠、和高可用的海量日志采集、聚合和传输的系统。支持在日志系统中定制各类数据发送方,用于收集数据;同时,Flume提供对数据进行简单处理,并写到各种数据接受方(比如文本、HDFS、Hbase等)的能力 。
Flume的数据流由事件(Event)贯穿始终。事件是Flume的基本数据单位,它携带日志数据(字节数组形式)并且携带有头信息,这些Event由Agent外部的Source生成,当Source捕获事件后会进行特定的格式化,然后Source会把事件推入(单个或多个)Channel中。你可以把Channel看作是一个缓冲区,它将保存事件直到Sink处理完该事件。Sink负责持久化日志或者把事件推向另一个Source。
Flume的安装
- Flume的安装比较简单,上传安装包到只需要解压即可,当然,前提是已有hadoop环境,上传安装包到数据源所在节点上。
- 解压 tar -zxvf apache-flume-1.6.0-bin.tar.gz
- 进入flume的目录,修改conf下的flume-env.sh,在里面配置JAVA_HOME。
- 根据数据采集的需求配置采集方案,描述在配置文件中(文件名可任意自定义)。指定采集方案配置文件,在相应的节点上启动flume agent。
- 使用Flume将本地文件采集到kafka中去,在Flume的conf目录中创建一个名为log_kafka的conf文件,并进行如下配置:
# 定义 agent
a1.sources = src1
a1.channels = ch1
a1.sinks = k1
# 定义 sources 监控root目录下的名为log的文件;常见source的类型:avro、exec、spooldir
a1.sources.src1.type = exec
a1.sources.src1.command=tail -F /root/log
a1.sources.src1.channels=ch1
# 定义 sinks,下沉到kafka
a1.sinks.k1.type = org.apache.flume.sink.kafka.KafkaSink
a1.sinks.k1.topic = topicAAAA
a1.sinks.k1.brokerList =hadoop:9092
a1.sinks.k1.batchSize = 20
a1.sinks.k1.requiredAcks = 1
a1.sinks.k1.channel = ch1
# 定义 channels
a1.channels.ch1.type = memory
a1.channels.ch1.capacity = 1000
- 启动Flume
bin/flume-ng agent --conf conf --conf-file conf/log_kafka.conf --name a1