目录解读
最近接触到Flume,这里通过一些小案例做一些学习的分享。主要包括以下内容:
1-概念
2-源码编译
3-快速入门
4-源码解读
5-TAILDIR监听日志文件,源码修改,新增系统名称
6-TAILDIR监听日志文件到HDFS的案例
7-TAILDIR监听日志文件到Kafka的案例
8-TAILDIR监听日志文件到ES6.X版本的案例(包括自己实现ES高版本的Sink)
注:本系列所有文章基于Flume 1.7.0
概念
Flume 概念的理解推荐去阅读官网:
http://flume.apache.org/releases/content/1.7.0/FlumeUserGuide.html
Flume是一个高可用的,高可靠的,分布式的海量日志采集、聚合和传输的系统,Flume
支持在日志系统中定制各类数据发送方,用于收集数据.同时,Flume提供对数据进行简
单处理,并写到各种数据接受方(比如文本、HDFS、Hbase等)的能力。
***Agent***
Flume 运行的核心是 Agent。Flume以agent为最小的独立运行单位。
一个agent就是一个JVM。它是一个完整的数据收集工具,每台机器运行一个agent,但是
可以在一个agent中包含多个source和sink。
***Event***
一个数据单元,消息头和消息体组成。Events可以是日志记录、avro 对象等。
***Source***
Source是数据的收集端,负责将数据捕获后进行特殊的格式化,将数据封装到事件
event 里,然后将事件推入Channel中。
***Channel***
Channel是连接Source和Sink的组件,大家可以将它看做一个数据的缓冲区数据队列
,它可以将事件暂存到内存中也可以持久化到本地磁盘上,直到Sink处理完该事件。
***Sink***
Sink从Channel中取出事件,然后将数据发到别处,比如HDFS,Kafka,ES,Hbase等......
源码编译
下载地址:
https://github.com/apache/flume/releases/tag/release-1.7.0
导入项目到idea,然后进行编译
mvn install -Dmaven.test.skip=true
编译过程可能会遇到一些问题
如果是和ua_parser相关的问题:
则下载ua_parser:https://github.com/tobie/ua-parser/releases
然后对ua_parser进行打包然后获取到jar之后install到本地的maven
命令如下:
mvn install:install-file -DgroupId=ua_parser -DartifactId=ua-parser
-Dversion=1.3.0 -Dpackaging=jar
-Dfile=D:\app\workspace\idea\github\ua-parser-java-1.3.0\java\target\ua-parser-1.3.0.jar
最后重新打包
去flume-ng-dist 下的target目录下获取apache-flume-1.7.0-bin.tar.gz包
解压就可以使用了。
快速入门
让我们一起来快速使用一下flume吧。(kafka相关配置这里不详细描述)
(1) 准备工作:启动zk和kafka,kafka版本需要0.9.0.1或者以上。flume1.7.0不支持
低版本。
(2) 创建一个测试的topic
./kafka-topics.sh --create --zookeeper localhost:2181
--replication-factor 1 --partitions 2 --topic flume-test
(3) 准备flume启动加载的配置文件flume-kafka.conf
agent.sources = kafka_sources01
agent.channels = kafka_channel01
agent.sinks = kafka_sink01
agent.sources.kafka_sources01.type = TAILDIR
agent.sources.kafka_sources01.positionFile = /home/hadoop/data/flume/taildir_position.json
agent.sources.kafka_sources01.filegroups = f1
agent.sources.kafka_sources01.filegroups.f1 = /home/hadoop/data/flume/data/.*
agent.sources.kafka_sources01.channels = kafka_channel01
agent.channels.kafka_channel01.type = memory
agent.channels.kafka_channel01.capacity = 5000
agent.channels.kafka_channel01.transactionCapacity = 5000
agent.sinks.kafka_sink01.type = org.apache.flume.sink.kafka.KafkaSink
agent.sinks.kafka_sink01.topic = flume-test
agent.sinks.kafka_sink01.brokerList = localhost:9092
agent.sinks.kafka_sink01.batchSize = 10
agent.sinks.kafka_sink01.channel = kafka_channel01
(4) 启动flume和kafka
./bin/flume-ng agent --conf conf -f conf/flume-kafka-conf.properties
-n agent -Dflume.root.logger=INFO,console
./kafka-console-consumer.sh --zookeeper localhost:2181
--topic flume-test --from-beginning
(5) 测试
我们在/home/hadoop/data/flume/data/这个目录下面建立一个文件log.txt,
然后执行echo "Intel Galileo" >> log.txt。
观察kafka消费者,相信你可以看到消费者打印出来了相同的数据。
(6) 总结
TAILDIR source 会监听我们配置的目录下面的任意文件,如果有新的行产生,就会
读取出来,然后传入到我们配置的channel中(简单来说是一个队列)。
然后通过配置的kafka sink,从channel中不断的取出数据,然后生产取出的数据
到指定的topic。就相当于我们自己写一个kafka的生产者,只不过flume封装好了
让我们传入必须的参数就可以使用。
未完待续
4-源码解读
5-TAILDIR监听日志文件,源码修改,新增系统名称
6-TAILDIR监听日志文件到HDFS的案例
7-TAILDIR监听日志文件到Kafka的案例
8-TAILDIR监听日志文件到ES6.X版本的案例(包括自己实现ES高版本的Sink)
点击查看更多内容
为 TA 点赞
评论
共同学习,写下你的评论
评论加载中...
作者其他优质文章
正在加载中
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦