Flume-ng 1.6启动过程源码分析(一)

本文介绍了Flume-ng的启动过程,包括命令行参数的载入、配置文件的加载、组件工厂对象的初始化、具体组件实例的创建以及组件的启动流程。重点关注配置加载与组件启动两个阶段。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 启动部分主要分为四块

 

  1. 命令行参数的载入,这部分用的common cli实现

  2. 对于可选的zk配置的加载

  3. 对于flume-ng配置的加载,这里利用EventBus实现配置文件动态加载

  4. 组件的启动

简单介绍下EventBus,它是Guava提供的消息发布-订阅类库,机制与观察者模式类似。

 

下面主要介绍上面提到的第34部分。

首先flume-ng的启动类是org.apache.flume.node.Application 位于flume-ng-node的项目里

首先介绍ConfigurationProvider这个接口,它仅提供一个方法

public MaterializedConfiguration getConfiguration();

 

 

下面就从加载flume-ng配置开始,介绍启动流程

总体来说三大部分:

  1. 初始化Source Channel Sink的工厂对象

  2. 创建具体的Source Channel Sink实例

  3. 组件启动

详细介绍:

  1. 创建Source Channel Sink的工厂对象

进入启动类org.apache.flume.node.Applicationmain方法

 

else流程为例,看一下PropertiesFileConfigurationProvider初始化时做了哪些

 

调用了父类的构造,从之前的继承关系图上可以看到,其父类AbstractConfigurationProvider

继续看一下父类的构造,初始化工厂类及channelCache

 

 

2. 创建具体的Source Channel Sink实例

在创建完PropertiesFileConfigurationProvider的实例configurationProvider后,代码中调用了configurationProvider.getConfiguration(),由于继承的关系,实际上调用的AbstractConfigurationProvidergetConfiguration,看一下它做了什么

 

读取了Flume的配置,加载组件,加载好的组件会分别放到channelComponentMapsourceRunnerMapsinkRunnerMap三个Map中。

loadSources为例,调查下如何加载Source

loadSources主要做了四件事情,

 

  1. 利用之前实例化的DefaultSourceFactory对象实例化source,其中create方法会先根据type判断type是内置还是自定制,然后通过反射的方式创建实例

  2. 创建ChannelProcessor对象,加载interceptor配置

  3. 返回SourceRunner对象,它分为两类PollableSourceRunnerEventDrivenSourceRunner,这里的判断依据是source实现了PollableSource接口还是EventDrivenSource接口,当然在代码中是通过 instanceof来判断

这里拓展一下,Source分为PollableSourceEventDrivenSourceEventDrivenSource可以理解时间驱动的,这样的sourceHttpSourceExecSource等,PollableSource是需要外部的驱动去轮询的Source,例如KafkaSource

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值