继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

Flume 实现自己的实时日志(1)

small_925_ant
关注TA
已关注
手记 69
粉丝 6395
获赞 157

目录解读

最近接触到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)
打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP