Flume 1.9.0 源码解析 : 环境配置 & 启动入口

从本文开始对Flume 1.9.0 源码进行分析, 首先从启动入手.

 

一.源码包下载.

                源码包: https://archive.apache.org/dist/flume/1.9.0/apache-flume-1.9.0-src.tar.gz

             

                官方用户API:https://flume.apache.org/releases/content/1.9.0/FlumeUserGuide.html
                官方开发API: https://flume.apache.org/releases/content/1.9.0/FlumeDeveloperGuide.html


                官网是英文,下面是本人按官网的翻译, 有条件的话,建议阅读官方API


                用户API:  https://zhangboyi.blog.csdn.net/article/details/88525489
                开发API:  https://zhangboyi.blog.csdn.net/article/details/88565862

 

 

二.构建项目

 

mvn clean install -Dmaven.test.skip=true -X

解压到工作目录. 使用 maven 构建项目. 项目结构如图:

 

 

 

 

 

 

三. 核心目录说明

  • flume-ng-channels
    里面包含了filechannel,jdbcchannel,kafkachannel,memorychannel通道的实现。

  • flume-ng-clients
    实现了log4j相关的几个Appender,使得log4j的日志输出可以直接发送给flume-agent;其中有一个LoadBalancingLog4jAppender的实现,提供了多个flume-agent的load balance和ha功能,采用flume作为日志收集的可以考虑将这个appender引入内部的log4j中。

  • flume-ng-configuration
    这个主要就是Flume配置信息相关的类,包括载入flume-config.properties配置文件并解析。其中包括了Source的配置,Sink的配置,Channel的配置,在阅读源码前推荐先梳理这部分关系再看其他部分的。

  • flume-ng-core
    flume整个核心框架,包括了各个模块的接口以及逻辑关系实现。其中instrumentation是flume内部实现的一套metric机制,metric的变化和维护,其核心也就是在MonitoredCounterGroup中通过一个Map<key, AtomicLong>来实现metric的计量。ng-core下几乎大部分代码任然几种在channel、sink、source几个子目录下,其他目录基本完成一个util和辅助的功能。

  • flume-ng-node
    实现启动flume的一些基本类,包括main函数的入口(Application.java中)。在理解configuration之后,从application的main函数入手,可以较快的了解整个flume的代码。

 

四.源码解析入口

以执行脚本命令举例

./flume-ng agent --conf conf --conf-file example.conf --name a1 -Dflume.root.logger=INFO,console
 

 

会调用flume-ng 脚本. 执行命令. 启动Java 程序

 

阅读后发现, 不管怎样都会调用  run_flume 方法, 只是根据参数不同,传入的参数不同而已.

我们看一下 run_flume 方法

 

 

执行命令

./flume-ng agent --conf conf --conf-file example.conf --name a1 -Dflume.root.logger=INFO,console
 

那么输出是什么呢???


 

exec

/Library/java/JavaVirtualMachines/jdk1.8.0_161.jdk/Contents/Home/bin/java

-Xmx20m  

-Dflume.root.logger=INFO,console

-cp conf:/workspace/apache-flume-1.9.0-src/lib/*

-Djava.library.path= org.apache.flume.node.Application

--conf-file example.conf --name a1


 

得出结论:  org.apache.flume.node.Application  启动类. 接下来直接看代码就好了.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值